我有一个彩色图像,行数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
传递。
答案 0 :(得分:1)
您应该将实际宽度作为位图宽度传递。然而,扫描线/步幅必须是双字对齐的。这意味着在计算步幅和内存缓冲区大小时,每行最多可添加3个字节。
请注意,数据的实际宽度取决于每像素的位数。如果您使用32位像素,那么它已经正确对齐。