一个没理想的程序员 2016-08-19 07:31 采纳率: 100%
浏览 3344
已采纳

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个,所以不是语句的原因,是图片的原因。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 Pwm双极模式H桥驱动控制电机
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题