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"/>