保存时,在二进制列中重新编码Jpeg图像

时间:2011-02-16 17:45:33

标签: c# winforms

我知道有类似的问题,但我有一个关于在二进制列中存储图像的问题。

我有一个小的Windows窗体应用程序,它使用Linq2SQL从sql compact db将图像加载到一个picturebox控件中。用户可以在图片框上拖动任何图像(jpg,bmp,gif)。在DragDrop-Event上,图像被加载到图片框中。 当我保存记录后,执行代码以存储图片框控件的图像:

MemoryStream imgStream = new MemoryStream();
pictureBox1.Image.Save(imgStream, System.Drawing.Imaging.ImageFormat.Jpeg);
myTable.MyImage = imgStream.ToArray();

我检查了字节数组的大小,保存记录后没有改变。 每次调用Save-Method时是否重新编码图像?或许可以更好地检查图像是否已经发生了变化。

2 个答案:

答案 0 :(得分:0)

如果在调用Save时调用此代码然后是,则PictureBox每次都将“导出”为JPEG。您是否因此注意到性能问题?如果你想避免它,在应用程序加载时设置一个标志,当发生拖放事件时,会发出一个标志,表示Save方法应该更新图像数据。

答案 1 :(得分:0)

JPEG图像被解码为.NET显示的功能(或者几乎任何东西)。因此,如果您将JPEG作为二进制文件拉出来,将其放入PictureBox(将其转换为栅格格式以显示),然后获取现在未压缩的光栅图像并重新压缩它,您可能最终会对其进行更改图像。

我会在幕后的某处保留显示图像的原始字节流,并在用户保存数据时将其写回数据库。这不仅有助于保持图像的完整性,还可以通过减少每次重新压缩图像的需要来提高性能。