C#遍历bmp图片各像素点时使用的GetPixel和内存方法计算结果有差异

遍历一张40X40的bmp图片的像素点,使用GetPixel遍历出的像素点数组长度是1600个,而使用内存方法数组长度却变成2809个,本人菜鸟一只,内存方法是参考别人的。希望大神答疑。GetPixel效率太低。
这是GetPixel方法
public List getcolor(string codes)
{
Jiami jm = new Jiami();
List listbyt = new List();
string code = jm.Encrypt(codes, "88888888");
string txt = "http://www" + code;
for (int i = 0; i < 40; i++)
{
for (int j = 0; j < 40; j++)
{

                Color color = new Bitmap(GenByZXingNet(txt)).GetPixel(i, j);
                if (color.R == 255)
                {
                    listbyt.Add(0);
                }
                else
                {
                    if (color.R == 0)
                    {
                        listbyt.Add(1);
                    }
                    else
                    {
                        if (0 < color.R && color.R < 255)
                        {
                            listbyt.Add(0);
                        }
                    }
                }

            }
        }
        int1 = 1;
        return listbyt;
    }

如下使用的内存法:
public List getcolor(string codes)
{
int d = 0;
string c = string.Empty;
List listbyt = new List();
Jiami jm = new Jiami();
string code = jm.Encrypt(codes, "88888888");
string txt = "http://www" + code;
Bitmap b = new Bitmap(ConvertTo1Bpp2(GenByZXingNet(txt)));
BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
int stride = bmData.Stride;
System.IntPtr Scan0 = bmData.Scan0;
unsafe
{
byte* ptr = (byte*)(bmData.Scan0);
for (int i = 0; i < bmData.Height; i++)
{
for (int j = 0; j < bmData.Width; j++)
{
byte blue = ptr[0];
if (blue == 0)
{
listbyt.Add(1);
}
else
{
listbyt.Add(0);
}
ptr += 3;
}
ptr += bmData.Stride - bmData.Width * 3;
}
}
b.UnlockBits(bmData);
int1 = 1;
return listbyt;
}

2个回答

感谢AinUser,问题自己找到了,由于是扫描的是二维码图片,当内容二维码内的内容增多时,图片内部的像素点会自动增多。而用GetPiex,我写得循环只有1600次,那么结果
就会只有1600个,所以不是语句的原因,是图片的原因。

可以去知乎还有github上面搜索一下

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐