我有一个彩色图像,行数为 479,列数为 638。我正在尝试将此图像保存为 BMP 文件。为此,我首先使用 CreateDIBSection
,然后使用 CreateDIBitmap
。对于CreateDIBSection
,我需要将BITMAPINFOHEADER
传递给函数。这里它有两个参数biWidth
和biSizeImage
。由于函数返回的内存应该是 DWORD 对齐的,并且 638
不是 4
的倍数,我应该传递 638 还是 640 作为宽度?假设我传递 638 作为宽度,函数返回的内存是 638 x 479 还是 640 x 479 ?我的观察是它是 640 x 479。在这种情况下,当我将文件另存为 BMP 时,每行末尾会出现一条 2 像素宽的黑线。我该如何避免这种情况?如果重要的话,我将 biCompression
作为 BI_RGB
传递。
最佳答案
您应该将实际宽度作为位图宽度传递。然而,扫描线/步长必须双字对齐。这仅意味着在计算步幅和内存缓冲区大小时向每行添加最多 3 个字节。
请注意,数据的实际宽度取决于每像素的位数。如果您使用 32 位像素,那么它已经正确对齐。
关于c - 要传递给 CreateDIBSection 函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14643020/