イメージのすべてのピクセルをスキャンするプログラムを作成しています。ピンクの色を含むピクセルが見つかるたびに、ピクセルを黒くします。しかし、画像上に2つのピンクのピクセルがある場合は、ピンクのピクセルが見つからないようです。私はLockBitsを正しく使用しているかどうかわかりませんが、多分私はそれを間違って使っています。誰かが私が大いにそれを感謝するこれを解決するのを助けることができますか?ここでビットをロックするとピクセルが検出されない
は、以下のコードです:
Bitmap bitmap = pictureBox1.Image as Bitmap;
System.Drawing.Imaging.BitmapData d = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), System.Drawing.Imaging.ImageLockMode.ReadWrite, bitmap.PixelFormat);
IntPtr ptr = d.Scan0;
byte[] rgbs = new byte[Math.Abs(d.Stride) * bitmap.Height];
Marshal.Copy(ptr, rgbs, 0, rgbs.Length);
Graphics g = pictureBox1.CreateGraphics();
for (int index = 2; index < rgbs.Length; index += 3)
{
if (rgbs[index] == 255 && rgbs[index - 1] == 0 && rgbs[index - 2] == 255) // If color = RGB(255, 0, 255) Then ...
{
// This never gets executed!
rgbs[index] = 0;
rgbs[index - 1] = 0;
rgbs[index - 2] = 0;
}
}
Marshal.Copy(rgbs, 0, ptr, rgbs.Length); // Copy rgb values back to the memory location of the bitmap.
pictureBox1.Image = bitmap;
bitmap.UnlockBits(d);