c - 要传递给 CreateDIBSection 函数的参数

标签 c image winapi bitmap

我有一个彩色图像,行数为 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 传递。

最佳答案

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

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

关于c - 要传递给 CreateDIBSection 函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14643020/

相关文章:

windows - 通过 Win32 API 从服务创建 Windows session

c - 需要在函数前加上 (void)

javascript - 将简单的javascript程序转换成C

iphone - 在 Facebook 连接 iphone 上上传图像

image - 使 TinyMCE 图像选择对话框指向 Plone 上的默认文件夹

c++ - 关于选择正确的数据类型和算法将数据插入数据库所需的建议

c - 在 C 代码中包含 wpa_ctrl.h

清除不需要的值

c++ - 将 QImage 转换为 char*

delphi - 如何将 Unicode 字符串写入控制台屏幕缓冲区?