一个没理想的程序员 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 simulink仿真中dtc控制永磁同步电机如何控制开关频率
  • ¥15 用C语言输入方程怎么
  • ¥15 网站显示不安全连接问题
  • ¥15 github训练的模型参数无法下载
  • ¥15 51单片机显示器问题
  • ¥20 关于#qt#的问题:Qt代码的移植问题
  • ¥50 求图像处理的matlab方案
  • ¥50 winform中使用edge的Kiosk模式
  • ¥15 关于#python#的问题:功能监听网页
  • ¥15 怎么让wx群机器人发送音乐