Я пытаюсь получить все байтовые значения из растрового изображения (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.Source, как показано ниже, изображение отображается правильно. Так в чем моя вина?
<Image Source="D:/tmp/test2.png"/>