Img.GetPixel(i + row, j + col) 换成 LockBits怎么写
我不想用GetPixel那么慢的函数
但是不懂LockBits的写法
private unsafe void PointerFun(Bitmap curBitmap)
{
int width = curBitmap.Width;
int height = curBitmap.Height;
Rectangle rect = new Rectangle(0, 0, curBitmap.Width, curBitmap.Height);
System.Drawing.Imaging.BitmapData bmpData = curBitmap.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite,PixelFormat.Format24bppRgb );//curBitmap.PixelFormat
byte temp = 0;
int w = bmpData.Width;
int h = bmpData.Height;
byte* ptr = (byte*)(bmpData.Scan0);
for (int i = 0; i < h; i++)
{
for (int j = 0; j <w; j++)
{
}
ptr += bmpData.Stride - bmpData.Width * 3 ;//每行读取到最后“有用”数据时,跳过未使用空间XX
}
curBitmap.UnlockBits(bmpData);
}
------解决方案--------------------下午写了一个类似的,你参考一下这个帖子
20楼...
http://bbs.csdn.net/topics/390479917
------解决方案-------------------- byte* ptr = (byte*)(bmpData.Scan0);
这里的ptr是图片锁定区域左上角像素的指针。
bitmapdata可以认为是一个byte数组。排列是按照从左至右,从上至下扫描。
如果你要找 x=10,y=8的点的像素值。
就是ptr+((height*8)+10)*像素宽度。
像素宽度与你的图片文件类型有关,有32位,24位等不同。32位就是*4,24位就是*3。
这里面太多基础知识你不懂,所以不会写。
------解决方案--------------------Img.GetPixel(i + row, j + col) i+row不太好处理,因为每个扫描线都有多余的字节,
------解决方案--------------------