簡體   English   中英

在.Net中加載圖像時出現OutOfMemory異常

[英]OutOfMemory exception when loading an image in .Net

我從SQL CE數據庫中加載圖像,然后嘗試將其加載到PictureBox中。

我正在這樣保存圖像:

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

然后使用LINQ To SQL保存到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”);

當GDI無法理解某種圖像格式時,它就會拋出OOM異常。 使用Irfanview查看實際上是哪種圖像,GDI可能無法處理它。

根據您提供的代碼,似乎您將圖像視為一個字符串,這可能是由於從byte []到字符串以及從字符串到byte []的轉換而丟失了數據。

我對SQL CE不熟悉,但是如果可以的話,應該考慮將數據視為byte []而不是在字符串之間進行編碼。

我的假設基於這一行代碼

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

我的建議是除非需要訪問原始字節,否則不要使用FileStream加載圖像。 而是使用Bitmap或Image對象中提供的靜態方法:

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

要保存文件,請使用Image或Bitmap對象的.Save方法:

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

當然,我們不知道ArtWork是什么類型。 您願意與我們分享這些信息嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM