来自Bitmap的Image.Source未显示

时间:2014-07-23 10:04:20

标签: c# .net wpf image

我有一个位图列表,我存储了一些图像。然后我希望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时,它不显示图像。我做错了什么?

1 个答案:

答案 0 :(得分:3)

在将MemoryStream分配给StreamSource属性后,您正在处置它。

但根据BitmapImage.StreamSource你需要

  

如果要在创建BitmapImage后关闭流,请将CacheOption属性设置为BitmapCacheOption.OnLoad。默认的OnDemand缓存选项保留对流的访问,直到需要位图,并且清理由垃圾收集器处理。

因此,请删除using语句,以便MemoryStream不会被处置或使用BitmapCacheOption.OnLoad