位图LockBits,UnlockBits调用性能

时间:2015-04-30 07:34:03

标签: c# .net bitmap gdi+

我正在开发一个性能非常重要的应用程序。此应用程序需要大量图像处理,因此我们大多数人都知道使用GDI +方法GetPixelSetPixel访问Bitmap的像素非常慢。要解决此问题,我们使用Bitmap.LockBitsBitmap.UnlockBits方法,并且我完全了解如何使用此方法访问像素,但我的问题是: Bitmap.LockBitsBitmap.UnlockBits的效果如何?他们执行任何像素复制或可能具有非线性顺序的东西吗? 我之所以问这个问题,是因为我在代码中发现了大量要求Bitmap.LockBitsBitmap.UnlockBits方法的问题。我做了一个搜索,但我没有找到任何东西

1 个答案:

答案 0 :(得分:0)

LockBits方法返回BitmapData对象,该对象用于描述内存扇区。

BitmapData _bmd = _bmp.LockBits(new Rectangle(0, 0, _bmp.Width,_bmp.Height) , ImageLockMode ReadWrite, _bmp.PixelFormat);

enter image description here

看看http://www.mfranc.com/programming/operacje-na-bitmapkach-net-1/

更新

Lockbits会将位图数据从位图复制到可以读取/写入的内存中的位置。 lockbits函数将为您提供Scan0,它是指向此位图数据开头的指针。因此,它涉及复制,但与上面的比较图表中的Normal GDI + Operation相比,即使这样也会快得多。还要注意掉约束记忆。