我从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”);
答案 0 :(得分:0)
当GDI无法理解某种图像格式时,它会出现抛出OOM异常的不良行为。使用Irfanview来查看真正的图像,GDI可能无法处理它。
答案 1 :(得分:0)
根据您提供的代码,您似乎将图像视为字符串,可能是数据因从byte []到string和string到byte []的转换而丢失。
我不熟悉SQL CE,但如果可以的话,你应该考虑将数据视为byte []而不是编码为字符串。
我的假设基于这行代码
byte[] img = (byte[])encoding.GetBytes(ThisFilm.Artwork.ToString());
答案 2 :(得分:0)
我的建议是不要使用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
是什么类型。您是否愿意与我们分享这些信息?