先看现象,这里有一张图片test.png,windows照片查看器可以正常打开

但是用QImage加载时
QString filePath = qApp->applicationDirPath()+"/test.png";
QImage image(filePath);
qDebug()<<image.isNull()<<image.width()<<image.height()
输出为:true 0 0
这里用到了QImage的构造函数:QImage::QImage(const QString &fileName, const char *format = nullptr),由于format未指定,QImage会根据后缀来识别图片。
通常,我们用QImage或QPixmap加载一张图片时,可以通过isNull()来判断是否加载成功,当加载失败时,isNull()返回false,同时width()和height()也返回0。这种现象很好复现,只需修改图片的后缀。上面用到的test.png,原来的后缀是jpg,我直接改成了png。
下面来说解决方法,这三种方法都是基于Qt,无需第三方库或系统函数。这三种方法的原理都是不根据图片的后缀,而且根据图片的内容来识别图片。
方法一:
读文件,然后将数据加载到图片
本文介绍了在Qt中遇到QImage或QPixmap加载图片时宽高为0的问题,即加载失败的情况。主要提供了三种解决方案:通过读取文件内容加载图片,利用QMimeDatabase识别图片类型,以及使用QImageReader进行优化加载。每种方法均能有效避免依赖图片后缀名来识别图片格式,从而解决加载失败的问题。
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



