0

我有一个行数为 479 列数为 638 的彩色图像。我正在尝试将此图像保存为 BMP 文件。为此,我首先使用CreateDIBSection然后使用CreateDIBitmap. 对于CreateDIBSection我需要将 传递BITMAPINFOHEADER给函数。这里它有两个参数biWidthbiSizeImage。由于函数返回的内存应该是 DWORD 对齐的,并且638不是4我应该传递 638 或 640 作为宽度的倍数吗?假设我传递 638 作为宽度,函数返回的内存是 638 x 479 还是 640 x 479 ?我的观察是它是 640 x 479。在这种情况下,当我将文件另存为 BMP 时,每行的末尾会出现一条 2 像素宽的黑线。我该如何避免这种情况?我过去了biCompressionBI_RGB好像这很重要。

4

1 回答 1

1

您应该将实际宽度作为位图宽度传递。然而,扫描线/步幅必须是双字对齐的。这意味着在计算步幅和内存缓冲区大小时,每行最多添加 3 个字节。

请注意,数据的实际宽度取决于每个像素的位数。如果您使用的是 32 位像素,那么它已经正确对齐。

于 2013-02-01T15:14:50.793 回答