PixelFormat.Format32bppArgb parece tener un orden de bytes incorrecto

Intento obtener todos los valores de bytes de un mapa de bits (System.Drawing.Bitmap). Por lo tanto, bloqueo los bytes y los copio:

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);
    }
}

Probé esta imagen con una imagen PNG de 2x2 muy simple con píxeles (rojo, verde, azul, blanco) que creé en Photoshop. Debido al formato, esperaba los siguientes valores dentro de argbData:

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

Pero obtuve:

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

Pero este es un formato BGRA. ¿Alguien sabe por qué los bytes parecen intercambiados? Por cierto, cuando uso la imagen directamente para una Image.Source como se muestra a continuación, la Imagen se muestra correctamente. Entonces, ¿cuál es mi culpa?

<Image Source="D:/tmp/test2.png"/>

Respuestas a la pregunta(3)

Su respuesta a la pregunta