2016-10-13 11 views
0

データベースから取得した画像パスに画像を保存したいのですが、「メモリ不足」というエラーが表示されます。次のコードは間違っていますか?ビットマップメモリ​​不足エラー

cmd.CommandText = "SELECT imageColumn FROM PhotoTable WHERE id= :id"; 
cmd.ClearParameters(); 
cmd.Parameters.AddWithValue(":id", Id); 
cmd.ExecuteDataReader(); 
if(cmd.DataReader.Read()) 
{ 
    var lob = cmd.ExecuteReader().GetOracleLob(0); 
    var image = new Bitmap(lob); 
    picturebox1.Image = image; 
    picturebox1.SizeMode = PictureBoxSizeMode.StretchImage; 
} 
filePathName="c://image1.jpeg"//save path and file name 
var bm = new Bitmap(picturebox1.Image); 
bm.Save(filePathName, System.Drawing.Imaging.ImageFormat.Jpeg); 
+1

メモリ不足は、GDI +(Bitmapが使用する)の一般的なエラーであり、実際のメモリ不足状態であるとは限りません。画像が破損しているか、サポートされていない形式(またはサイズなど)である可能性があります。バイトを直接ディスクに保存して( 'File.WriteAllBytes')、ファイルの種類を確認してください。 – Luaan

+0

...変換してDBに保存したときに画像が破損した場合にもエラーが発生します – Plutonix

+0

ルートへの書き込みアクセス権がない可能性があります。 – TaW

答えて

0

各行にBitmapを作成しています。ビットマップはDisposedでなければなりません。ビットマップをもう使用していないときは、それを処分する必要があります。ピクチャボックス用に1つのビットマップを作成し、その上にあるデータベースからビットマップを描画することができます。

PSEUDO:このような

var pictureBoxBitmap = new Bitmap(width, height, ....); 
picturebox1.Image = pictureBoxBitmap; 
picturebox1.SizeMode = PictureBoxSizeMode.StretchImage; 

using(Graphics pictureBoxGraphics = Graphics.FromImage(pictureBoxBitmap)) 
{ 
    if(cmd.DataReader.Read()) 
    { 
     var lob = cmd.ExecuteReader().GetOracleLob(0); 
     using(var image = new Bitmap(lob)) 
     { 
      pictureBoxGraphics.DrawImage(..... image); 
      pictureBox1.Refresh(); 
     } 
    } 
} 

何か。