我正在尝试使用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。
答案 0 :(得分:2)
来自iProgrammer:
位图通常实现为不可变对象。这意味着,一旦创建了位图,就无法对其进行任何更改。您可以通过创建新版本来操作位图,然后立即变为不可变....
WriteableBitmap,顾名思义,并不是不可变的,您可以获取其各个像素并根据需要对其进行操作。当您需要动态位图时,这是理想的工作方式。 iProgrammer - WriteableBitmap
来自MSDN:
"使用WriteableBitmap类以每帧为基础更新和呈现位图......" MSDN - WriteableBitmap Class
MSDN文章的示例部分还介绍了在响应鼠标事件时如何更新WritableBitmap图像。该示例中的代码通过在鼠标右键按下时将像素的ARGB值设置为0来擦除图像的像素。该代码还显示了如何更新鼠标左键按下的图像中的单个像素。本质上,代码显示了一个基本的像素图像编辑器。
然而,关键是,当使用常规位图时,您无法更改图像数据 - 您必须使用WritableBitmap。但是,如果愿意,您可以同时渲染两者。