一个没理想的程序员 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 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题