首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

Img.GetPixel(i + row, j + col) 换成 LockBits如何写

2013-07-04 
Img.GetPixel(i + row, j + col) 换成 LockBits怎么写我不想用GetPixel那么慢的函数但是不懂LockBits的写

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不太好处理,因为每个扫描线都有多余的字节,
------解决方案--------------------


lock之后你还是可以getpixel。。。我猜你多半没有尝试过。。

http://bbs.csdn.net/topics/390128489 不解释。。

热点排行