何时在Silverlight中使用WriteableBitmap和BitmapImage

时间:2015-01-14 20:36:29

标签: silverlight bitmapimage writeablebitmap

我正在尝试使用BitmapImage显示图像已有一段时间了。它已经改变了图像并停止了工作。

对于Bitmapimage,我使用的是此代码:

                            `ms.Seek(0, SeekOrigin.Begin); // ms is memory stream
                            BitmapImage b = new BitmapImage();
                            b.SetSource(ms);
                            image.ImageSource = b;`

我遇到了一段代码,它检查字节的长度是否[] == 14400

 if(bytes.length == 14400)
  {
  var bmp = new WriteableBitmap(width, height);
  Buffer.BlockCopy(buffer, 0, bmp.Pixels, 0, buffer.Length);
 }

我想知道何时使用WriteableBitmap和BitmapImage。

1 个答案:

答案 0 :(得分:2)

来自iProgrammer:

位图通常实现为不可变对象。这意味着,一旦创建了位图,就无法对其进行任何更改。您可以通过创建新版本来操作位图,然后立即变为不可变....

WriteableBitmap,顾名思义,并不是不可变的,您可以获取其各个像素并根据需要对其进行操作。当您需要动态位图时,这是理想的工作方式。 iProgrammer - WriteableBitmap

来自MSDN:

"使用WriteableBitmap类以每帧为基础更新和呈现位图......" MSDN - WriteableBitmap Class

MSDN文章的示例部分还介绍了在响应鼠标事件时如何更新WritableBitmap图像。该示例中的代码通过在鼠标右键按下时将像素的ARGB值设置为0来擦除图像的像素。该代码还显示了如何更新鼠标左键按下的图像中的单个像素。本质上,代码显示了一个基本的像素图像编辑器。

然而,关键是,当使用常规位图时,您无法更改图像数据 - 您必须使用WritableBitmap。但是,如果愿意,您可以同时渲染两者。