当我试图将WPF图像源设置为一个图像文件,该文件的大小为11 MB,并在14 MeagaPixcel摄像机中拍摄时,当图像在屏幕上呈现时,内存将高达170 MB,并且在呈现后内存也不会下降。如果我尝试使用.Net 2.0 Picturebox控件进行同样的操作,所使用的内存仅为.5MB到1MB。逻辑上,如果一个图像的文件大小是11 at,那么它应该在最大时只占用11 at,同时呈现对吗?在WPF中这种行为的原因是什么?是否有任何方法来处理额外的垃圾内存呈现后,在屏幕上?
发布于 2009-06-30 09:28:06
要回答你问题的第一部分:
在数码相机上拍摄的图像被存储为jpg文件,因此被压缩。当读入内存时,它将被解压缩。这解释了你在这里看到的大小上的差异。
例如,佳能EOS 450上拍摄的照片在磁盘上的文件大小为3MB。它的尺寸是307x2048。这导致内存中的大小为3072 * 2048像素* 24位/像素= 18,874,368字节(这有意义吗--我从来没有百分之百地肯定这些计算)
在保存图像数据的对象超出范围并被垃圾回收清除之前,内存使用量不会下降。
例如,您需要类似于以下代码的内容:
using (Image image = Image.FromFile(imageName))
{
// Non property item properties
FileName = imageName;
PixelFormat = image.PixelFormat;
Width = image.Size.Width;
Height = image.Size.Height;
foreach (PropertyItem pi in image.PropertyItems)
{
EXIFPropertyItem exifpi = new EXIFPropertyItem(pi);
this.propertyItems.Add(exifpi);
}
}一旦我从图像中获得了所需的所有信息,using语句就允许垃圾收集启动并释放内存。
https://stackoverflow.com/questions/1062672
复制相似问题