简单判断图像格式的办法(BMP/JPEG…

    今天遇到一个问题:测试人员发现某些“bmp”文件我们程序无法正确读取。我们是用QT库来读取图像的。似乎不应该出现这种问题,Google也没听到人抱怨。调试进去,发现是读取文件头后发现格式不对,所以QT没有继续读了。用UE打开一看,发现JFIF字样,搜索发现原来这个“bmp”其实是jpg格式的图像文件。
    之后测试了下,发现现在的图像编辑软件对后缀是宽容的。也就说明它们不是根据后缀来判断图像格式的。通过用UE打开BMP/JPEG/PNG/GIF四种格式的文件。我们发现了一些规律,可以根据这些规律简单判断图像的真正格式。判断不出来再使用后缀。
    BMP: 以"BM"开头,也就是文件0x00位置是ascII的'B',0x01位置是ascII的'M'
    JPEG: 0x06-0x09 "JFIF"
    GIF:  0x00-0x02 "GIF"
    PNG:  0x01-0x03 "PNG"
    这种简单判断方式不知道是否是正确全面的,不过目前还未发现问题。就先这样处理了。毕竟那些图像格式的说明文档都老长,暂时先用鸵鸟战术好了哈哈。

你可能感兴趣的:(c/cpp)