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

Jos*_*els 3 c++ msdn bitmap bitmapfactory

MSDN 文档似乎自相矛盾:

这里说:

对于未压缩的 RGB 格式,最小步幅始终是以字节为单位的图像宽度,四舍五入到最接近的 DWORD。

这里它说:

每条扫描线中的字节数。该值必须能被 2 整除,因为系统假定位图的位值形成一个字对齐的数组。

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

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

Han*_*ant 6

第一个报价是准确的。第二个可以追溯到 16 位版本的 Windows,并没有得到应有的编辑。并非完全不寻常,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);
Run Code Online (Sandbox Code Playgroud)

输出:4