无法在WriteableBitmap.WritePixels中处理byte []

时间:2015-03-30 11:34:26

标签: wpf bitmap out-of-memory writeablebitmap

在我的WPF应用程序中,我需要加载多个图像以在UI中显示它。为此,我使用WriteableBitmap,然后将byte []传递给Writeable.Writepixels()。在执行此操作时,我在执行5-6后出现内存异常。图像大小为13-15 MB。我在任务管理器中查看了内存消耗,其中我注意到每当调用Writepixels()时内存都会大幅增加。请参考以下代码:

WriteableBitmap bitmap = new WriteableBitmap(img.Width, img.Height, 96, 96, format, null);
var stride = data.Width * ((format.BitsPerPixel + 7) / 8);
bitmap.WritePixels(new Int32Rect(0, 0, data.Width, data.Height), data.Bytes, stride, 0);
return bitmap;

我在网上搜索了2天但是,我找不到合适的解决方案来处理WriteableBitmap()。请帮我解决问题。

1 个答案:

答案 0 :(得分:0)

重复使用WriteableBitmap实例,而不是每次调用方法时都创建一个新实例。

在类中声明一个字段来保存实例:

private WriteableBitmap bitmap;

然后改变你的方法:

if (bitmap == null || bitmap.PixelWidth != img.Width || bitmap.PixelHeight != img.Height)
{
    bitmap = new WriteableBitmap(img.Width, img.Height, 96, 96, format, null);
}
var stride = data.Width * ((format.BitsPerPixel + 7) / 8);
bitmap.WritePixels(new Int32Rect(0, 0, data.Width, data.Height), data.Bytes, stride, 0);
return bitmap;