Lockbits和GetPixels的问题

时间:2014-05-05 02:16:20

标签: c# graphics lockbits

我正在尝试使用Bitmap和GetPixels获取图像中的所有像素。现在我知道这是非常低效的,所以我一直在研究LockBits。我已经成功地做了我认为锁定位但我不能得到每个像素。我的代码到目前为止是......

//Creates Rectangle for holding picture
Rectangle bmpRec = new Rectangle(0, 0, bmp.Width, bmp.Height); 

BitmapData bmpData = bmp.LockBits(bmpRec, ImageLockMode.ReadWrite, bmp.PixelFormat); 

IntPtr Pointer = bmpData.Scan0; //Scans the first line of data

int DataBytes = Math.Abs(bmpData.Stride) * bmp.Height; //Gets array size

byte[] rgbValues = new byte[DataBytes]; //Creates array
string Pix = " ";
Marshal.Copy(Pointer, rgbValues, 0, DataBytes); //Copies of out memory

bmp.UnlockBits(bmpData);

for (int p = 0; p < DataBytes; p++)
{
     Pix += " " + rgbValues[p];
}

我想使用Lockbits,因为它是获取像素的最佳方式。有什么帮助吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

直接从LockBits访问数据时,存储顺序是B-G-R,而不是RGB ......这就是您以相反的顺序获取值的原因。