Qt - 将 bmp565 加载到 QPixmap

Qt - load bmp565 into QPixmap

我正在开发需要将 bmp 16 位(5-6-5)图像加载到 QPixmap 的应用程序。在 Qt 中有什么方法可以像 24 位 bmp 一样直接执行此操作?

我尝试将所有图像转换为 24 位版本,加载它们没有问题。不幸的是,我真的需要使用 16 位。

我也尝试了以下代码,但没有成功。但是我可以加载 16 位 (1-5-5-5) 版本的 bmp。

QImage img = QImage(300, 300, QImage::Format_RGB16);
img.loadFromData(imgArray);
ui->test->setPixmap(QPixmap::fromImage(img));

使用 QImage 构造函数对我来说似乎工作得很好:

QImage::QImage(const QString & fileName, const char * format = 0)

基本上,用途是:

QImage img = QImage("filename.bmp")

并且 RGB16 格式应该由构造函数从文件 header.

中自行获取

编辑:

您发布的文件似乎使用了 Qt 不支持的 header 类型。这是一个未记录的 header,大小为 56,称为 BITMAPV3INFOHEADERWikipedia 解释为:

Not officially documented, but this documentation was posted Adobe's forums, by an employee of Adobe with a statement that the standard was at one point in the past included in official MS documentation https://forums.adobe.com/message/3272950#3272950

这似乎是一个很特殊的 header 类型,很多库都不支持。但是,gimp 或 ImageMagic 可以加载并转换它,所以我建议您将文件转换为另一个使用更标准 header 的 RGB565 编码的 BMP 文件。然后,上面的代码将为您工作。