我有一个位图列表,我存储了一些图像。然后我希望WPF Image
上的UserControl
元素成为该列表的第一个元素。为此,我尝试了这个:
Image2.Source = myBitmapArray[0].ToBitmapImage();
其中ToBitmapImage
是一个静态函数,如下所示:
public static BitmapImage ToBitmapImage(this Bitmap bitmap)
{
BitmapImage bitmapImage = new BitmapImage();
using (MemoryStream memoryStream = new MemoryStream())
{
bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Bmp);
memoryStream.Position = 0;
bitmapImage.BeginInit();
bitmapImage.StreamSource = memoryStream;
bitmapImage.EndInit();
}
return bitmapImage;
}
但是,当我将BitmapImage
分配给我的Image.Source
时,它不显示图像。我做错了什么?
答案 0 :(得分:3)
在将MemoryStream
分配给StreamSource
属性后,您正在处置它。
但根据BitmapImage.StreamSource
你需要
如果要在创建BitmapImage后关闭流,请将CacheOption属性设置为BitmapCacheOption.OnLoad。默认的OnDemand缓存选项保留对流的访问,直到需要位图,并且清理由垃圾收集器处理。
因此,请删除using
语句,以便MemoryStream
不会被处置或使用BitmapCacheOption.OnLoad
。