位图应该是 2 字节对齐还是 4 字节对齐?

Are bitmaps supposed to be 2-byte or 4-byte aligned?

MSDN 文档似乎自相矛盾:

Here 它说:

For uncompressed RGB formats, the minimum stride is always the image width in bytes, rounded up to the nearest DWORD.

虽然 here 它说:

The number of bytes in each scan line. This value must be divisible by 2, because the system assumes that the bit values of a bitmap form an array that is word aligned.

所以有时 MSDN 需要 4 字节对齐的步幅,有时它需要 2 字节对齐的步幅。哪个是对的?

更具体地说,保存位图文件时应该使用 4 字节跨度还是 2 字节跨度?

For uncompressed RGB formats, the minimum stride is always the image width in bytes, rounded up to the nearest DWORD.

位图不一定总是未压缩的 RGB,它们可能是单色的。在BITMAP结构中,成员bmBitsPixel指定了每个像素的位数,所以它为1是有效的。所以,你应该保存RGB位图,字节步长是4、以2的倍数步长保存单色位图。

第一个引用是准确的。第二个可以追溯到 Windows 的 16 位版本,但没有按应有的方式进行编辑。并非完全不寻常,GDI32 文档有相当多的错误。

请注意,投票赞成的答案不准确。单色位图的步幅仍然是 4 的倍数,没有特殊规则使其成为 2。一些 .NET 代码可以证明这一点:

var bmp = new Bitmap(1, 1, System.Drawing.Imaging.PixelFormat.Format1bppIndexed);
var bdata = bmp.LockBits(new Rectangle(0, 0, 1, 1), System.Drawing.Imaging.ImageLockMode.ReadWrite, bmp.PixelFormat);
Console.WriteLine(bdata.Stride);

输出:4