我正在使用以下文件从文件中加载DIBSection: 通用标签

凭经验,我发现加载的位图与过去使用的位图之间存在以下差异,但找不到任何说明该差异的文档。

  • 这些行在内存中的顺序是自上而下而不是自下而上。我已经验证了.bmp文件本身是自下而上排序的。
  • 行填充为2个字节的倍数,而不是4个字节。

    当您使用 CreateDIBSection 时,我也发现了已记录的差异。从头开始创建DIBSection。

    • GetObject返回的DIBSECTION.dsHandle和BITMAP.bmBits值将为NULL。

      前两个区别的文档在哪里,我错过了什么吗?这是Windows 7,但我无法想象其他版本的Windows会有所不同。

      编辑:一些其他详细信息。这是temp.bmp的十六进制转储;这是一张7x7的图像,右侧有白色条纹,而蓝色值则沿左侧递增(0x10、0x20等)。您可以看到第一行(00,00,70)是第一行,并且填充了3个字节。 通用标签

      这是一个示例程序,用于读取.bmp文件并写出内容。为了简便起见,我已经删除了错误检查。 通用标签

      这是上面程序的输出以及生成文件的十六进制转储: 通用标签

有帮助吗?

解决方案

调用GetDIBits而不是GetBitmapBits。GetBitmapBits的文档(此处)表示这正在返回与设备相关的位图的数据,而您有与设备无关的位图。它们还指示不应使用此调用,并且仅用于16位兼容性。因此,使用GetDIBits应该可以解决问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top