PixelFormat.Format32bppArgb имеет неправильный порядок байтов

] Я пытаюсь получить все байтовые значения из Bitmap (System.Drawing.Bitmap) Поэтому я блокирую байты и копирую их:

public static byte[] GetPixels(Bitmap bitmap){
    if(bitmap-PixelFormat.Equals(PixelFormat.Format32.bppArgb)){
        var argbData = new byte[bitmap.Width*bitmap.Height*4];
        var bd = bitmap.LockBits(new Rectangle(0, 0, image.Width, image.Height), ImageLockMode.ReadOnly, bitmap.PixelFormat);
        System.Runtime.InteropServices.Marshal.Copy(bd.Scan0, argbData, 0, bitmap.Width * bitmap.Height * 4);
        bitmap.UnlockBits(bd);
    }
}

Я тестировал это изображение с очень простым изображением PNG 2x2 с пикселями (красный, зеленый, синий, белый), которое я создал в Photoshop. Из-за формата я ожидал, что следующие значения в argbData:

255 255   0   0    255 0   255   0 
255 0     0 255    255 255 255 255 

Но я получил:

0     0 255 255     0 255   0 255
255   0   0 255   255 255 255 255

Но это формат BGRA. Кто-нибудь знает, почему байты меняются местами? Кстати, когда я использую изображение непосредственно для Image .Источник, как показано ниже, изображение отображается правильно. Так в чем моя вина?

<Image Source="D:/tmp/test2.png"/>
23
задан 0xBADF00D 12 November 2011 в 12:39
поделиться