さて、私は2つのプログラムを作成しました。を使用する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秒です。GetPixels よりも Lockbits の方が時間がかかる理由がわかりません。
また、私の出力ファイルは、リストされている場所に関して一致しません。あたかもそれらが順不同であるかのようです。
これは取り組むべき大きな問題なので、私の問題を読んで解決しようとしてくれてありがとう。