2016-10-13 3 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을 생성하고 있습니다. 비트 맵은 폐기되어야합니다. 비트 맵을 더 이상 사용하지 않을 때는 그 비트 맵을 삭제해야합니다. picturebox에 대해 하나의 비트 맵을 만들고 그 위에있는 비트 맵을 그릴 수 있습니다.

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

뭔가.

관련 문제