【问题标题】:How to add padding bytes to a bitmap?如何将填充字节添加到位图?
【发布时间】:2010-09-29 23:05:37
【问题描述】:

假设我有一些栅格数据要写入文件。现在我想将其写入为 bmp 文件。

这个数据恰好不是 DWORD 对齐的,如果我理解正确的话,需要用足够的字节填充才能到达下一个 DWORD..

但是,当我尝试用这段代码填充它时:

bmFile.Write(0x0, (4-(actualWidth%4)));

我得到一个错误..如果我尝试调试(我使用的是 MSVC++ 6.0),下一条语句指向 CFile::Write 中的一个断言,它断言第一个参数为 NULL..所以这失败了..

我应该如何填充它?我应该写出来吗:

bmFile.Write("0x0"(4-(actualWidth%4)));

相反?还是按字面意思来对待...?

谢谢..

【问题讨论】:

    标签: c++ bitmap visual-c++-6 padding


    【解决方案1】:

    或许可以试试:

    bmFile.Write("\0\0\0\0", (4-(actualWidth%4)));
    

    如您所说,您的第一个示例是尝试写入由空指针指向的数据。您的第二个示例将从具有 ASCII 值 0x30、0x78、0x30 的字节“0”、“x”、“0”写入,这可能不是您想要的。

    【讨论】:

    • \0\0\0\0 是做什么的?写四个“0”位还是四个“0”字节?
    • 每个 \0 代表一个零字节(每个字节为 8 位)。因此,这提供了 Write 方法可以从中提取的四个字节,第二个参数确定要写入文件的字节数。
    • 哦,我明白了.. 所以如果我真的运行了我们的代码并且模数除法的数字被评估为 3,那么我实际上会写 12 个字节的“0”吗?也许您可以将示例更改为“\0”而不是“\0\0\0\0”,以便我可以将其标记为正确答案:)
    • 不,Write() 的第二个参数是字节数。即使您传递的字节数比第一个参数中的多,也只会写入指定的字节数。只使用 "\0" 是错误的,因为如果您想写入 3 个字节,将没有足够的字节可供写入。
    猜你喜欢
    • 2021-06-14
    • 2012-04-21
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多