MSDN文档似乎自相矛盾:
Here它说:
对于未压缩的RGB格式,最小步幅始终是以字节为单位的图像宽度,向上舍入为最接近的DWORD。
虽然here说:
每条扫描线中的字节数。该值必须可以被2整除,因为系统假定位图的位值形成一个字对齐的数组。
因此,有时MSDN需要一个4字节对齐的步幅,有时它需要一个2字节对齐的步幅。哪个是对的?
更具体地说,在保存位图文件时,我应该使用4字节步幅还是2字节步幅?
答案 0 :(得分:4)
第一个引用是准确的。第二个可以追溯到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);
输出:4
答案 1 :(得分:1)
对于未压缩的RGB格式,最小步幅始终是图像宽度(以字节为单位),向上舍入为最接近的DWORD。
位图不一定总是未压缩的RGB,它们可能是单色的。在BITMAP
结构中,成员bmBitsPixel
指定每个像素的位数,因此它有效为1.因此,您应该使用字节跨度保存RGB位图。 4,并保存单步位图,步幅为2的倍数。