在 WritableBitmap 中操作像素的快速方法是什么(我也使用 WritableBitmapEx 扩展)?SetPixel 对于像为我的 Paint-like 应用程序填充背景这样的事情来说是非常慢的方法,它还会做一些奇怪的事情,比如内存损坏(不知道为什么)。
问问题
416 次
1 回答
1
SetPixel 非常慢 - 这是真的。
您应该使用 LockBits 方法,然后使用不安全代码(像素指针)迭代所有像素。
例子:
// lock the bitmap.
var data = image.LockBits(
new Rectangle(0, 0, image.Width, image.Height),
ImageLockMode.ReadWrite, image.PixelFormat);
try
{
unsafe
{
// get a pointer to the data.
byte* ptr = (byte*)data.Scan0;
// loop over all the data.
for (int i = 0; i < data.Height; i++)
{
for (int j = 0; j < data.Width; j++)
{
operate with pixels.
}
}
}
}
finally
{
// unlock the bits when done or when
// an exception has been thrown.
image.UnlockBits(data);
}
我建议你阅读这篇文章。
于 2012-10-31T21:29:10.277 回答