- 主题:qt 5的QImage问题
刚试着打开了一个38400*5400 的 BMP,593MB。没有任何问题。
【 在 hengcuiyuan 的大作中提到: 】
: QImage载入大于30M的BMP图片就不行了,返回NULL,有没有什么办法解除限制?
--
FROM 114.100.89.*
30MB连续空间不是很大,除非是在嵌入式系统上用qt,正常不会因为内存不足失败。
有些图像库要求行列不超过32767,有可能32位的qt有这个限制。
【 在 hgoldfish 的大作中提到: 】
: 我想起来,会不会是楼主用的是 32bit 编译器,分配不了太长的连续地址,所以失败了。
:
--
FROM 223.104.34.*
开源版5.14.2,5.12.0 也试过都没问题。就是最普通的load函数。
qt再弱也不可能打不开这么小的图片。所以问题大概率在你这里。
【 在 hengcuiyuan 的大作中提到: 】
: 商业版还是开源版?具体qt哪个版本?用的是QImage里面的哪个函数载入图片的?
:
--
FROM 223.104.34.*
你觉得 Qt 会这么弱吗?那么多开源的和商业的图像软件都是 Qt 写的。如果QImage这么弱,谁还会用呢。我这样做机器视觉应用的,所有的界面都是 Qt 开发的。图像加载和保存也都是用的 QImage,现在的工业相机2千万像素是很常见的,一张 BMP 60MB 。线阵相机一张图片经常1、2G。用 QImage 也没遇到问题的。Qt3 的那个年代,打开个 几十兆的图像文件都毫无压力。
无论你的 QImage 是建立在堆上还是栈上,内部图像数据都是在堆上的。所以也不用怀疑这里。
【 在 hengcuiyuan 的大作中提到: 】
: 不可能吧,我直接load是空,代码:
: QImage img;
: img.load("./bmp/3.bmp");
: ...................
--
FROM 220.180.240.*
./bmp/3.bmp 这个路径改成绝对路径试试。 你现在这个路径在 QtCreator 和 直接运行是不一致的。
【 在 hengcuiyuan 的大作中提到: 】
: 不可能吧,我直接load是空,代码:
: QImage img;
: img.load("./bmp/3.bmp");
: ...................
--
FROM 220.180.240.*
你这个确实打不开。是因为图像像素数超出 16384 * 16384 了,这个应该是 bmp 图像加载算法有限制。
下次你直接说像素数,你说30多兆的图像,我们都认为也就是几百万像素的图像。。。
解决办法可以存成 png 图片。
【 在 hengcuiyuan 的大作中提到: 】
: 不是这个问题,我读取同样文件夹里面一个17M的图片就可以的,好诡异。
: 两个图片放到附件里面,3可读进来,6读了以后是NULL.
: 是不是编译的时候要设置什么东西?
: ...................
--
修改:dormouseBHU FROM 36.5.241.*
FROM 36.5.241.*
是啊。38400 * 5400 * 3 = 6220800000 = 593.2617 * 1024 * 1024
【 在 nudtcq 的大作中提到: 】
: 24位真彩色?
: :
--
FROM 36.5.241.*
他那个图像确实打不开。我做了个实验,对 BMP 图像,像素大于 16384 * 16384 的都打不开。
png,jpg 都没问题。 应该是底层的 bmp 的 driver 有问题。
【 在 hgoldfish 的大作中提到: 】
: 我想起来,会不会是楼主用的是 32bit 编译器,分配不了太长的连续地址,所以失败了。
:
--
FROM 36.5.241.*
就是每个像素占24bit,也就是一个像素三个字节。
【 在 bigsen 的大作中提到: 】
: 24位真彩意思是单像素24通道么?
--
FROM 220.180.240.*
这个应该是从远古时代遗留的代码…
当年确实对像素数有限制。
【 在 flybb 的大作中提到: 】
: 确实限制总像素数不能超过16384 * 16384
: 不知道为什么要这样限制
: static bool read_dib_infoheader(QDataStream &s, BMP_INFOHDR &bi)
: ...................
--
FROM 220.180.240.*