有效地获取图像的所有像素信息

我制作了一个程序来从图片中获取所有图像像素RGB颜色代码。 基本上,它将y位置设置为常量,并通过循环将x位置从零改为宽度和y。

确定它的工作原理,但问题是从均匀(1000 * 604高度宽度)图像获取所有像素需要20多分钟。 请有人帮忙吗?

如果这个过程需要很长时间,我会感到惊讶,那么我们如何从图像中创建像条形码阅读器这样的程序。 我想从图像中获取所有像素值,这里是我的C#代码如下。

我也在这里上传了我的程序,如果你不同意,请检查一下。

void myimage() { mypic = new Bitmap(pathname); int imwid = mypic.Width; int imhei = mypic.Height; int total=imwid*imhei; for (int z = 0; z <imhei;z++ ) { for (int i = 0; i < imwid; i++) { Color pixelColor = mypic.GetPixel(i, z); textBox2.AppendText(" " + pixelColor.R + " " + pixelColor.G + " " + pixelColor.B + " " + pixelColor.A + Environment.NewLine); } } } 

看看这个:

 var data = mypic.LockBits( new Rectangle(Point.Empty, mypic.Size), ImageLockMode.ReadWrite, mypic.PixelFormat); var pixelSize = data.PixelFormat == PixelFormat.Format32bppArgb ? 4 : 3; // only works with 32 or 24 pixel-size bitmap! var padding = data.Stride - (data.Width * pixelSize); var bytes = new byte[data.Height * data.Stride]; // copy the bytes from bitmap to array Marshal.Copy(data.Scan0, bytes, 0, bytes.Length); var index = 0; var builder = new StringBuilder(); for (var y = 0; y < data.Height; y++) { for (var x = 0; x < data.Width; x++) { Color pixelColor = Color.FromArgb( pixelSize == 3 ? 255 : bytes[index + 3], // A component if present bytes[index + 2], // R component bytes[index + 1], // G component bytes[index] // B component ); builder .Append(" ") .Append(pixelColor.R) .Append(" ") .Append(pixelColor.G) .Append(" ") .Append(pixelColor.B) .Append(" ") .Append(pixelColor.A) .AppendLine(); index += pixelSize; } index += padding; } // copy back the bytes from array to the bitmap Marshal.Copy(bytes, 0, data.Scan0, bytes.Length); textBox2.Text = builder.ToString(); 

只是一个例子,一般阅读一些关于LockBits和成像的好教程,以便清楚地了解会发生什么。

获取像素信息不应该花那么长时间。 你能记录myimage()运行所需的时间吗? 缓慢可能在其他地方。 还尝试删除myimage()textBox2.AppendText开头的行,然后查看它运行的速度。