如何区分32位和24位bmp文件?另外我如何将32位bmp文件读入C ++数组?

时间:2016-07-23 20:08:51

标签: c++ bitmap bmp

我无法找到在线提供的bmp文件之间的任何区别,因此我可以很容易地判断它们是24位还是32位。

我需要使用C ++将32位bmp文件读入rgb数组,大多数教程仅存在32位。

1 个答案:

答案 0 :(得分:0)

位图文件的格式描述为here on MSDN:它以14字节的文件头开头,后跟bitmap info header,其中包含您在字段中查找的信息{ {1}}。

<强> 编辑:

正如评论中的iinspectable所指出的,位图格式可能很复杂。因此,对于Windows,最好使用Windows API访问上述结构的信息。

如果您正在跨平台工作,那么您必须自己处理许多细节:

  • 不同的file format versions:事实上,您需要在文件的偏移量14处读取biBitCount(32位无符号)以找出which version of the data structure。您要查看的信息是文件的偏移24(核心版本)或28(其他版本)。它是WORD,所以16位是无符号的。

  • 可以压缩文件格式。核心版本不是这种情况。对于其他版本,它在以下DWORD中指示(在偏移30处)。

  • 所有整数都存储在little endian中。

但是,您可以考虑CImg或其他库,而不是自己完成所有这些操作。