2010-04-19 6 views
1

SQL CE 데이터베이스에서 이미지를로드 한 다음이를 PictureBox에로드하려고합니다..NET에서 이미지를로드 할 때 OutOfMemory 예외가 발생했습니다.

나는이 같은 이미지를 저장하고 :

if (ofd.ShowDialog() == DialogResult.OK) 
      { 
       picArtwork.ImageLocation = ofd.FileName; 
       using (System.IO.FileStream fs = new System.IO.FileStream(ofd.FileName, System.IO.FileMode.Open)) 
       { 
        byte[] imageAsBytes = new byte[fs.Length]; 
        fs.Read(imageAsBytes, 0, imageAsBytes.Length); 
        thisItem.Artwork = imageAsBytes; 
        fs.Close(); 
       } 
      } 

다음 SQL에 LINQ를 사용하여 DB에 저장.

using (FileStream fs = new FileStream(@"C:\Temp\img.jpg", FileMode.CreateNew ,FileAccess.Write)) 
       { 
        byte[] img = (byte[])encoding.GetBytes(ThisFilm.Artwork.ToString()); 
        fs.Write(img, 0, img.Length); 
       } 

을하지만,에서 OutOfMemoryException을 얻고있다 :

그래서 같은 이미지를 다시로드합니다. 나는 이것이 약간의 붉은 청어이고 아마도 파일 형식에 문제가있을 것이라고 읽었지 만, 나는 무엇을 할 수 없는지를 잘 알고있다.

아이디어가 있으십니까?

감사합니다. picArtwork.Image = System.Drawing.Bitmap.FromFile (@ "C : \ Temp \ img.jpg");

+0

thisItem.Artwork의 유형은 무엇입니까? 첫 번째 코드 블록에서 바이트를 할당하지만 두 번째 코드 블록에서는 Artwork ToString을 변환하고이를 바이트로 변환합니다. 왜 여러 번 전환합니까? – dthorpe

답변

0

제공 한 코드에 따르면 이미지를 문자열로 취급하는 것처럼 보이지만 데이터가 byte []에서 string 및 string [byte]로 변환되면서 손실 될 수 있습니다.

SQL CE에 익숙하지 않지만 데이터를 바이트 []로 취급하고 문자열과 인코딩하지 않는 것이 좋습니다.

나는 코드

byte[] img = (byte[])encoding.GetBytes(ThisFilm.Artwork.ToString()); 
+0

.ToString()을 제거하고 매력처럼 작동했습니다. 잘 보였다. 건배. – Ben

0

GDI는 특정 이미지 형식을 이해할 수 없을 때마다 OOM 예외를 throw하는 동작이 좋지 않습니다. Irfanview를 사용하여 실제로 어떤 이미지인지 확인하십시오. GDI가 처리하지 못할 가능성이 있습니다.

+0

글쎄, 내가 직접 추가 한 파일이기 때문에 .jpg를 알고있다. .Net은 형식을 변환합니까? – Ben

+0

형식을 변경하지 않아야하지만 GDI에서 오는 형식이므로 GDI가 지원하는 형식이어야합니다. – dthorpe

0

내 조언은 당신이 생의 바이트에 액세스 할 필요가없는 이미지를로드하여 FileStream을 사용하지 않는 것이 줄을 내 가정을 기반으로. 대신, 비트 맵 또는 이미지 개체에서 제공하는 고정 방법을 사용하십시오

Image img = Image.FromFile(@"c:\temp\img.jpg") 
Bitmap bmp = Bitmap.FromFile(@"c:\temp\img.jpg") 

파일은 이미지 또는 비트 맵 객체의 .Save 방법을 사용하여 저장하려면 : 물론

img.Save(@"c:\temp\img.jpg") 
bmp.Save(@"c:\temp\img.jpg") 

우리가 모르는 무엇을 종류는 ArtWork입니다. 그 정보를 우리와 공유하길 원하십니까?

관련 문제