将System.Windows.Controls.Image加载到WriteableBitmap对象

时间:2014-09-24 09:47:49

标签: c# wpf writeablebitmap

我已经在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?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您无法直接从任何WriteableBitmap创建ImageSource,因为ImageSource可能不是BitmapSource(这是Writeablebitmap构造函数作为参数的内容)

但是,在您的情况下,将Source属性转换为BitmapSource是安全的:

var bitmap = new WriteableBitmap((BitmapSource)Square.Source);

请注意,Image控件的Source属性属于ImageSource类型(而不是BitmapSource),因为该控件能够显示其他类型的图像而不仅仅是位图,例如矢量图像。