当前位置: 代码迷 >> QT开发 >> QImage在读取某些图档的时分会crash
  详细解决方案

QImage在读取某些图档的时分会crash

热度:54   发布时间:2016-04-25 04:06:50.0
QImage在读取某些图档的时候会crash
在读取一些bmp图档的时候会导致程序崩溃,图档下载
http://www.sendspace.com/file/trqq80


#include <QtCore>
#include <QtGui>

int main(int argc, char *argv[])
{
    QString const prefix = "C:/Qt/crash_pictures/";
    QStringList name(QStringList() << "rgb32-111110.bmp" << "rgb32bf.bmp" << "rgba32.bmp"<< "badheadersize.bmp"<<"badpalettesize.bmp");  

    for(int i = 0; i != name.size(); ++i){
        qDebug() << name[i];
        QImage read(prefix + name[i]); //crash at here
        qDebug() << read.isNull(); //can't reach this line
        qDebug() << read.format();
    }
    
    return 0;
}


测试环境
Qt版本
Qt4.8, compiler 是 mingw4.6.2, 32bits
Qt5.0, compiler 是 msvc2010 32bits

OS : win7 64bits

这是Qt的bug吗?或者我的使用方法有错?
有何方法可以避免?
只是读不到资料没有关系
会导致程序崩溃则很麻烦
虽然这种图档不常看到
但是我总不能寄希望与侥幸
crash

------解决方案--------------------
Qt的image可能兼容的格式不是很全,以前在XP上用图片查看器保存的png,在Qt里就打不开。
------解决方案--------------------
引用:
引用:Qt的image可能兼容的格式不是很全,以前在XP上用图片查看器保存的png,在Qt里就打不开。
打不开无所谓,但是不能crash
Qt不是专门做图像处理的库,我不奢求他能处理所有的图

引用:bool QImage::load ( const QString &amp;amp; fileName……


bmp前面是有个header做解析用的  可能是你的bmp的header不对

------解决方案--------------------
引用:
引用:引用:引用:Qt的image可能兼容的格式不是很全,以前在XP上用图片查看器保存的png,在Qt里就打不开。
打不开无所谓,但是不能crash
Qt不是专门做图像处理的库,我不奢求他能处理所有的图

引用:bool Q……


前面不是有load函数吗 read前先检查下阿
任何函数调用都可能抛出异常 包括stl 你觉得stl就是一个完备的不回抛出异常的
问题是使用者一定要知悉问题所在 如果qt 有异常 你完全可以catch掉阿 

------解决方案--------------------
引用:
引用:前面不是有load函数吗 read前先检查下阿
任何函数调用都可能抛出异常 包括stl 你觉得stl就是一个完备的不回抛出异常的
问题是使用者一定要知悉问题所在 如果qt 有异常 你完全可以catch掉阿 

……
我之前在阅读Qt的时候就问过为何Qt完全没有提到哪个function会抛出什么exception?
答案是……


什么开发平台? 这个地方可能抛出的不是C++的异常,而是结构化异常
------解决方案--------------------
经测试那几个图片确实不错,程序立即死翘翘。
------解决方案--------------------

单步运行没问题 Qt4.7 + VC2008
  相关解决方案