在 WPF 中更新图像

问题描述 投票:0回答:0

我已经构建了一个 UserControl 来显示各种文档的各个页面的缩略图。我通过不同的库作为 byte[] 获取图像。我现在需要转换它以便我可以在图像控件中显示它。到目前为止,我首先使用 MemoryStream 从数组创建了一个 Drawing.Bitmap,然后首先使用 GetHbitmap() 将其转换为 IntPtr,然后再转换为 BitmapSource。对于较大或非常高分辨率的文档,在几页之后使用 IntPtr hBitmap = image.GetHbitmap();我首先收到消息“内存不足。”,然后是“GDI+ 中的一般错误”。我现在已经尝试了互联网上的各种建议来更改转换。最后我尝试将 byte[] 写入 WriteableBitmap 并将其用于显示。但到目前为止,我无法让它发挥作用。所以现在的一般问题是:将图像数据从 byte[] 转换为图像(BitmapSource、BitmapImage、WriteableBitmap)的最佳方法是什么,以便内容可以快速更新,即使是几百页也不会出现内存溢出。例如,在内存中执行此操作是否有意义,或者您应该先将图像作为 jpg 格式保存到磁盘?

到目前为止,这是我的代码。在我的真实代码预览中,图像控件的源绑定到一个属性。

System.Drawing.Bitmap image
using (MemoryStream imageStream = new MemoryStream(byteArray))
{
    image = new System.Drawing.Bitmap(imageStream);
}

IntPtr hBitmap = image.GetHbitmap();
BitmapSource preview = Imaging.CreateBitmapSourceFromHBitmap(hBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
preview.Freeze();
DeleteObject(hBitmap);
image.Dispose();

非常感谢您的任何提示和帮助!

c# wpf image memory
© www.soinside.com 2019 - 2024. All rights reserved.