Qt QImage 加载 BMP 图像的一个BUG
这个问题源于水木社区的一个帖子:https://www.mysmth.net/nForum/#!article/KDE_Qt/27466
经过测试 QImage 加载像素数大于 16384*16384 的图像会失败。
查看Qt 源代码可以看到:
static bool read_dib_infoheader(QDataStream &s, BMP_INFOHDR &bi)
{s >> bi; // read BMP info headerif (s.status() != QDataStream::Ok)return false;int nbits = bi.biBitCount;int comp = bi.biCompression;if (!(nbits == 1 || nbits == 4 || nbits == 8 || nbits == 16 || nbits == 24 || nbits == 32) ||bi.biPlanes != 1 || comp > BMP_BITFIELDS)return false; // weird BMP imageif (!(comp == BMP_RGB || (nbits == 4 && comp == BMP_RLE4) ||(nbits == 8 && comp == BMP_RLE8) || ((nbits == 16 || nbits == 32) && comp == BMP_BITFIELDS)))return false; // weird compression typeif (bi.biWidth <= 0 || !bi.biHeight || quint64(bi.biWidth) * qAbs(bi.biHeight) > 16384 * 16384)return false;return true;
}
确实是 quint64(bi.biWidth) * qAbs(bi.biHeight) > 16384 * 16384 时直接返回 false。
非常愚蠢和粗暴的代码。
去查找这个代码是谁提交的,可以看到 Sep 11, 2018 一条提交记录。
https://github.com/qt/qtbase/commit/621ab8ab59901cc3f9bd98be709929c9eac997a8
给出了如下的解释:
bmp image handler: check for out of range image sizeMake the decoder fail early to avoid spending time and memory on
attempting to decode a corrupt image file.Change-Id: I874e04f3b43122d73f8e58c7a5bcc4a741b68264
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
所以在 Qt里,如果你用 QImage 打开 BMP图像,像素数要小于 16384 * 16384 。这个可以说是个 Bug ,也可以说是 QImage 的Feature吧。
如果要加载超过 16384 * 16384 的图像怎么办呢?可以把图像存为 png 格式。这个格式是无损压缩的。QImage 可以成功打开很大的 png 图像。
Qt QImage 加载 BMP 图像的一个BUG相关推荐
- 【Qt】QImage加载bmp位图数据
QImage直接加载bmp文件 QImage image(image.bmp); QImage加载已经获取的bmp数据 unsigned char *imageData = NULL; int ima ...
- qimage加载bmp图片_9个最佳的优化动态gif图片大小的工具
动态gif虽然对显示动画很有吸引力,也很有用,但它比JPG.PNG和其他图像格式占用的带宽要大得多.在那些经常显示gif图像的网站上,这意味着加载所需的时间更长,也就是说,网站似乎需要更长的时间来 ...
- qimage加载bmp图片_批量修改图片大小,我发现了最简单的方法!
点击上方蓝字 关注我们 批量调整图片大小的软件很多很多,但很多时候我仅仅对图片做些小修改,而不需要那么多强大的功能,要的是实用,而不是有多华丽,然后运行速度快,也是我们所追求的,不要批处理图片的时候 ...
- 【QT】添加图片资源并使用QImage加载图片显示
文章目录 一.QT工程添加图片资源 二.QT工程使用QImage加载图片显示 一.QT工程添加图片资源 到了此步,按下Ctrl+s按键即可. 此时可看到工程下多了以下文件. 二.QT工程使用QImag ...
- Qt Creator加载占位符数据
Qt Creator加载占位符数据 加载占位符数据 使用虚拟模型 创建虚拟上下文 加载占位符数据 设计模式支持视图,模型和委托,因此,当您添加网格视图,列表视图或路径视图项时,将自动添加ListMod ...
- android webview 像素,Android:在WebView中加载的图像中的像素质量降低
我正在为移动浏览器构建Javascript应用程序(不包装为原生应用程序). 我注意到,如果图像尺寸超过特定阈值(宽度超过1400像素左右),Android(经过测试的2.3模拟器和Galaxy S设 ...
- Qt同时加载多个项目
Qt同时加载多个项目 如何将多个项目使用一个.pro文件启动起来? 新建一个.pro文件,加入如下几行: TEMPLATE = subdirs SUBDIRS += ComboBox/ComboBox ...
- QT实现加载百度离线地图
在Qt中加载百度地图需要用到网络浏览器,在此采用webEngine模块,然后用webchannel进行qt与HTML/JavaScript的交互. 需求描述:软件加载百度地图,用鼠标在地图上选点,并进 ...
- html加载超大像素图片,html – 首先加载低分辨率背景图像,然后加载高分辨率图像...
这是我使用的方法 CSS: #div_whatever { position: whatever; background-repeat: no-repeat; background-position: ...
最新文章
- ASP.NET MVC Music Store教程(1):概述和新项目
- 学霸大佬整理,超全 Python 学习路线图(附工具+视频+书籍+面试)
- 在Python中使用Seaborn和WordCloud可视化YouTube视频
- 关于在asp.net中textbox文本输入框中的汉语标点符号显示位置的问题
- Easyui Datagrid相同连续列合Demo之三
- 加密软件漏洞评测系统_苹果向用户推送macOS Big Sur 11.0.1正式版系统_华强北软件网_软件行情_软件新闻_软件评测_手机应用文章...
- UI设计实用素材|iPhone样机模型(展示你的应用程序、网站或用户界面的完美方式。
- MySQL高级知识(十四)——行锁
- 中国凝血测试耗材行业市场供需与战略研究报告
- Android动画居然还能这么写
- 怎么用python下载网易云_如何使用python批量下载网易云音乐的免费音乐
- 干了半年的java Web,知道自己特别喜欢游戏开发,那就去干吧
- 服务器CPU使用率过高排查与解决思路
- 上市公司股息红利差别化个人所得税政策
- IDEA中maven项目dependencies报错飘红问题解决
- 复旦大学计算机学院教师简介,复旦大学计算机科学技术学院导师教师师资介绍简介-危辉...
- arcgis 将地图点转换为屏幕坐标_ArcGIS地图投影和坐标转换方法
- canvas重力小球 html+css+js
- 阿里云ECS云盘在线扩容
- 疲劳驾驶样本集_上海6辆集卡车追尾起火,集卡事故为何频发? | 港口圈