2016-10-13 4 views
0

Я хочу сохранить изображение на мой путь к изображению, который я получил из базы данных, но я получаю ошибку «Из памяти». Что это значит, что я неправильно делаю следующий код?Bitmap Out Of Memory Ошибка

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

... вы также получите эту ошибку, если * вы * испортили изображение при преобразовании и сохранили его в БД – Plutonix

+0

Возможно, у вас нет права на запись в корневой каталог. – TaW

ответ

0

Вы создаете Bitmap в каждой строке. Растровое изображение должно быть удалено. Если вы больше не используете растровое изображение, вы должны его уничтожить. Вы можете создать одно растровое изображение для изображения и нарисовать растровое изображение из базы данных на нем.

ПСЕВДО:

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(); 
     } 
    } 
} 

что-то вроде этого.