当我尝试从ImageSource转换为BitmapImage时,为什么会出现运行时错误?

时间:2012-12-19 10:39:58

标签: c# .net wpf image-processing

我正在使用this answer,尝试将ImageSource转换为BitmapImage。我在WPF画布上有一个Image控件,其源是一个位图,我想将此控件的source属性提取到一个变量(它将是一个ImageSource),然后将其转换为BitmapImage。

我的代码如下:

ImageSource source = MyImage.Source;
BitmapImage image = (BitmapImage) source;

它与链接答案中的代码基本相同,但我在第二行(我试图转换的地方)遇到以下运行时错误:

  

无法将“System.Windows.Media.Imaging.BitmapFrameDecode”类型的对象强制转换为“System.Windows.Media.Imaging.BitmapImage”。

我猜这个合乎逻辑的答案是,这根本无法完成,但是答案被接受,有一个好评,有四个赞成令人沮丧。我正在使用Visual Studio 2012和.Net 4.5,我试图针对4.0,3.5和3.0进行编译,并且看到同样的问题。

我还尝试了Ashura的建议here,结果只是空(就像我使用 as 关键字而不是投射结果的值一样变量为空)。

在我的XAML中,我的Image控件的source属性是一个 * .bmp 文件,我最终试图将它转换为WriteableBitmap,但是我需要让BitmapImage传入WriteableBitmap的构造函数。

所以我的问题是,我做错了什么?如何从ImageSource转换为BitmapImage?

1 个答案:

答案 0 :(得分:1)

谢谢你的评论者,你帮我理解了这个问题。

我最终从我的XAML中取出 Source 属性,并在 Window Loaded 事件中执行以下操作,以确保来源我的图像控件的属性确实是一个BitmapImage:

private void Window_Loaded_1(object sender, RoutedEventArgs e)
{
    var image = new BitmapImage(new Uri("sample.bmp", UriKind.Relative));
    MyImage.Source = image;
}

显然,如果你在XAML中执行此操作,默认情况下,Source属性最终会成为 BitmapFrameDecode 对象。