ですから、実行したばかりの簡単なテストについては非常に混乱しています。私はC#でいくつかの画像処理を行っています。Get / SetPixel()は遅すぎることがわかっているので、私はLockBitsを使用して生データを取得しています。
しかし、私には理解できない状況に陥ったようです。画像をスキャンしていると、各ピクセルがBgra、つまり青バイト、緑バイト、赤バイト、アルファの順に配置されているように見えます。私はそれらがArgbの順序で配置されるだろうという印象を受けました。これが私が使用しているコードのサンプルです。
BitmapData baseData =
m_baseImage.LockBits(new Rectangle(new Point(0, 0), m_baseImage.Size),
ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
Bitmap test = new Bitmap(m_baseImage.Width, m_baseImage.Height);
byte* ptr = (byte*)baseData.Scan0;
for (int y = 0; y < m_baseImage.Height; ++y)
{
for (int x = 0; x < m_baseImage.Width; ++x)
{
// this works, image is copied correctly
Color c1 = Color.FromArgb(*(ptr + 3), *(ptr + 2), *(ptr + 1), *ptr);
// below does not work! Bytes are reversed.
//Color c1 = Color.FromArgb(*ptr, *(ptr + 1), *(ptr + 2), *(ptr + 3));
test.SetPixel(x, y, c1);
ptr += 4;
}
}
m_baseImage.UnlockBits(baseData);
pictureBox1.Image = m_baseImage;
pictureBox2.Image = test;
ベースイメージの色を取得する最初の行は機能しますが、2番目の行は機能しません。私はここで非常に明白な何かを見逃していると確信しています。