Qt-将bmp565加载到QPixmap中

Qt-将bmp565加载到QPixmap中,qt,bmp,qpixmap,Qt,Bmp,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->se

我正在开发的应用程序需要将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格式应该由构造函数自己从文件头中提取

编辑: 您发布的文件似乎使用了Qt不支持的头类型。它是一个大小为56的未记录标头,称为BITMAPV3INFOHEADER,解释如下:

没有正式的文档记录,但此文档是Adobe发布的 Adobe的一名员工在论坛上发表声明,表示该标准 在过去的某一点上,已包含在官方MS文档中


它似乎是一种非常特殊的头类型,许多库都不支持它。但是,gimp或ImageMagic可以加载并转换它,因此我建议您将文件转换为另一个使用更标准头的RGB565编码的BMP文件。然后,上面的代码将适用于您。

很遗憾,我无法将QImage::Format_RGB16传递给loadFromData。。。因为它不是const char*类型。我尝试了默认的构造函数,只包含文件路径,但这对我不起作用。谢谢。。。最后,我编写了一个代码,将bmp图像中的数据读取到QByteArray中,偏移量为70,用于跳过标题,转换为uchar字符串,并使用QImageconst uchar*数据、int-width、int-height和Format格式读取图像。现在,虽然图像已反转,但加载似乎仍然有效。但是无论如何,你的答案是正确的,我想我会按照你的建议将图片转换成合适的标题。你能举一个这样的图片的例子吗?我在自己的RGB565上测试了使用QImage构造函数加载的效果,这是我正在尝试加载的一个图像。