我已经在xaml代码中创建了Image对象:
<Image Name="Square" Source="Square.png" Height="400" Width="640"/>
在代码隐藏中,我写过:
WriteableBitmap bitmap = new WriteableBitmap((int)Square.Width, (int)Square.Height, 96, 96, PixelFormats.Rgb24, null);
如果我正在创建像素数组,那么将它放到WritableBitmap然后像这样放到Image:
int width = 300;
int height = 300;
WriteableBitmap bitmap = new WriteableBitmap(width, height, 96, 96, PixelFormats.Rgb24, null);
uint[] pixels = new uint[width * height];
bitmap.WritePixels(new Int32Rect(0, 0, 300, 300), pixels, width * 4, 0);
**Square.Source = bitmap;**
我没有任何问题,但是当我尝试将我在xaml代码中创建的图片加载到WritableBitmap时,我无法做到这一点:
WriteableBitmap bitmap = new WriteableBitmap((int)Square.Width, (int)Square.Height, 96, 96, PixelFormats.Rgb24, null);
bitmap = Square.Source; // Cannot implicitly convert type 'System.Windows.Media.ImageSource' to 'System.Windows.Media.Imaging.WriteableBitmap'
因此,如果我无法将&#39; System.Windows.Media.ImageSource&#39; 转换为&#39; System.Windows.Media.Imaging。 WriteableBitmap&#39; ,为什么我可以将&#39; System.Windows.Media.Imaging.WriteableBitmap&#39; 转换为&#39; System.Windows.Media。的ImageSource&#39;?
Square.Source = bitmap;
bitmap = Square.Source; // Why it does not work?
感谢您的帮助。
答案 0 :(得分:2)
您无法直接从任何WriteableBitmap
创建ImageSource
,因为ImageSource
可能不是BitmapSource
(这是Writeablebitmap构造函数作为参数的内容)
但是,在您的情况下,将Source
属性转换为BitmapSource
是安全的:
var bitmap = new WriteableBitmap((BitmapSource)Square.Source);
请注意,Image控件的Source
属性属于ImageSource
类型(而不是BitmapSource
),因为该控件能够显示其他类型的图像而不仅仅是位图,例如矢量图像。