第一个引用是准确的,第二个引用可以追溯到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
CreateBitmap
/CreateBitmapIndirect
/BITMAP
结构体 - 都是预Windows 3.0时代的API,应该在16位处理器上使用。这就是为什么它们使用这个16位对齐的步幅。
所有新的API都使用32位步幅对齐(sizeof(DWORD)
)。
如果您的缓冲区具有32位对齐的步幅,则可以使用“更新”的API(Windows 3.0之后)如CreateDIBitmap
或CreateCompatibleBitmap
/SetDiBits
。
至于文件 - 它们使用BITMAPINFO
/BITMAPINFOHEADER
结构和意味着32位步幅对齐。