我在文件中有一个自上而下的独立于设备的位图,并使用 LoadImageW() 加载它并获取句柄。
在 Windows 7 中,位图加载正常。在 Windows 10 和 11 中,加载相同的位图将返回 NULL 句柄,并将最后一个错误设置为零。我的理解是,这表示位图无效。
如果我将位图文件转换为自下而上的位图,Windows 10 可以很好地加载它。根据记录,自下而上的位图是标准的 Windows 格式 - 位图中的第一行像素是最底层的行。自上而下的位图是反转的,第一行像素是最上面的行。这由 BITMAPINFOHEADER 结构中的负 biHeight 成员指示。
正如我所说,Windows7 中的 LoadImageW() 加载了自下而上和自上而下的位图,没有任何问题。Windows 10似乎认为自上而下的位图(恰好是OS / 2格式,但由Microsoft记录)无效。我在文档中找不到任何声明不再支持自上而下位图的内容。
我使用 C++ 程序创建了一个测试 Visual Studio 项目来演示该问题,以及相同的自上而下和自下而上的位图,以及我第一次发布此问题。我通过链接提供了这个,但该帖子因“违反标准”而被删除。大概不允许链接,但似乎没有任何方法可以提供 zip 文件,我也无法上传 BMP 文件。但是,我将在此处发布测试程序。要重现该问题,只需将位图替换为自上而下的位图,您就会看到它在 Windows 10 和 Windows 11 上失败,但在 Windows 7 上运行良好。
此问题由: Windows 10 and 11 do not support top-down bitmaps like Windows 7? - Microsoft Q&A总结而来