所以,我对刚刚跑过的一个快速测试感到非常困惑。我正在用C#做一些图像处理。 Get/SetPixel()已经证明太慢了,所以我使用LockBits来获取原始数据。为什么我的图像看起来像Bgra而不是Argb格式?
但是,我似乎遇到了我无法弄清楚的情况。在扫描图像时,每个像素似乎按照Bgra布局,即蓝色字节,绿色字节,红色字节和alpha。我的印象是,他们将按照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;
其抓住基本图像作品的颜色的第一行,第二不。我很确定,我错过了一些非常明显的东西。
你说得对。这是Windows的事情,不是由于CPU的字节顺序。 – 2009-02-24 19:46:10