好的,我已经创建了两个程序。一个使用GetPixels
,另一个使用LockBits
。我的 GetPixels 程序如下...
所指的条纹图片为 200x200 jpg
Stopwatch GetTime = new Stopwatch();
Bitmap img = new Bitmap("stripe.jpg");
GetTime.Start();
for (int i = 0; i < img.Width; i++)
{
for (int j = 0; j < img.Height; j++)
{
Color pixel = img.GetPixel(i, j);
output += " " + pixel;
}
}
GetTime.Stop();
现在这个读取大约 20 秒来处理这个图像并输出所有像素。太好了,但是理论上我的 LockBits 应该更快。我的 LockBits 代码是...
Bitmap bmp = new Bitmap("stripe.jpg");
Rectangle bmpRec = new Rectangle(0, 0, bmp.Width, bmp.Height); //Creates Rectangle for holding picture
BitmapData bmpData = bmp.LockBits(bmpRec, ImageLockMode.ReadWrite, Pixels); //Gets the Bitmap data
IntPtr Pointer = bmpData.Scan0; //Scans the first line of data
int DataBytes = Math.Abs(bmpData.Stride) * bmp.Height; //Gets array size
byte[] rgbValues = new byte[DataBytes]; //Creates array
string Pix = " ";
Marshal.Copy(Pointer, rgbValues, 0, DataBytes); //Copies of out memory
bmp.UnlockBits(bmpData);
Stopwatch Timer = new Stopwatch();
pictureBox1.Image = bmp;
Timer.Start();
for (int p = 0; p < DataBytes; p++)
{
Pix += " " + rgbValues[p];
}
Timer.Stop();
时间是37秒。现在我不明白为什么我的 Lockbits 时间比 GetPixels 长。
此外,我的输出文件的列出位置也不匹配。就好像它们出了问题一样。
这是一个需要解决的大问题,所以提前感谢大家阅读并尝试解决我的问题。