我正在使用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?
答案 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 对象。