2013-02-01 58 views
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像素宽的黑色线条。我如何避免这种情况?如果有问题,我将通过biCompression作为BI_RGB要传递给CreateDIBSection函数的参数

回答

0

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

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