我试图从一个位图(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);
}
}
我用 Photoshop 制作了一个非常简单的 2x2 PNG 图像,其中包含像素 (红色,绿色,蓝色,白色),并对该图像进行了测试。由于格式的原因,我期望 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"/>
BitConverter.IsLittleEndian
的一个很好的观点,但我认为@HansPassant关于字节序的评论真的很有价值 - 这是另一个不应该考虑字节序的地方。这里有一篇关于这个主题的很棒的文章。 - Jonno