我可以像这样成功加载下面的Bitmap,并在视图的Image控件中显示它。 但是,只要我添加此行以从位图创建WriteableBitmap, 我在上面的行中收到运行时错误:“对象引用未设置为对象的实例。” 似乎BitmapImage创建被延迟了,可能是吗? 我该怎么解决这 ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我试图使用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。
从iProgrammer:
位图通常实现为不可变的对象。 这意味着一旦创建了位图,就无法对其进行任何更改。 您可以通过创建新版本来操纵位图,然后立即将其变为不变。
顾名思义,WriteableBitmap并不是一成不变的,您可以获取其各个像素并根据需要进行任意操作。 当您需要动态位图时,这是理想的工作方式。 iProgrammer-WriteableBitmap
从MSDN:
“使用WriteableBitmap类在每帧的基础上更新和呈现位图...” MSDN-WriteableBitmap类
MSDN文章的“示例”部分还显示了在响应鼠标事件时如何更新WritableBitmap图像。 该示例中的代码通过在鼠标右键按下时将像素的ARGB值设置为0来擦除图像的像素。 该代码还显示了如何在鼠标左键按下的情况下更新图像中的各个像素。 基本上,代码显示了基本的像素图像编辑器。
但是,要点是,使用常规位图时不能更改图像数据-必须使用WritableBitmap。 但是,您可以根据需要渲染两者。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.