QImage打开分辨率大的图片会报错:QImageIOHandler: Rejecting image

1、现象描述 

QImage打开分辨率大的图片(例如9344*7000),会报错,提示信息如下:

qt.gui.imageio: QImageIOHandler: Rejecting image as it exceeds the current allocation limit of 128 megabytes

QImage image1(file_path);
qDebug() << image1.format();

if (image1.format() == QImage::Format_Invalid)
{
//qt.gui.imageio: QImageIOHandler: Rejecting image as it exceeds the current allocation limit of 128 megabytes
    return;
}


2、解决办法
//原因是QImage默认最大仅支持128MB的文件
//我们的9344*7000的单通道图片就有62.3MB大小,而QImage是按照四通道来限制内存的,所以62.3MB*4=249.2MB
//解决办法就是扩容,使用setAllocationLimit函数,设置一个大于249.2MB的数值就可以

int m1 = QImageReader::allocationLimit(); //默认值是128MB
QImageReader::setAllocationLimit(250);    //设置大一些就可以了
int m2 = QImageReader::allocationLimit();
qDebug() << m1 << m2;
QImage image1(file_path);
qDebug() << image1.format(); //OK

3、我们来计算一下分辨率10000*10000的图片,需要分配多少内存。

先看单通道

10000*10000/1024/1024=95.367MB

再看四通道

95.367MB*4=381.468MB

所以QImage想正常打开一幅10000*10000的图片,需要预先设置QImageReader::setAllocationLimit(382);

猜你喜欢

转载自blog.csdn.net/libaineu2004/article/details/132190000