这个问题源于水木社区的一个帖子: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相关推荐

  1. 【Qt】QImage加载bmp位图数据

    QImage直接加载bmp文件 QImage image(image.bmp); QImage加载已经获取的bmp数据 unsigned char *imageData = NULL; int ima ...

  2. qimage加载bmp图片_9个最佳的优化动态gif图片大小的工具

    ​​动态gif虽然对显示动画很有吸引力,也很有用,但它比JPG.PNG和其他图像格式占用的带宽要大得多.在那些经常显示gif图像的网站上,这意味着加载所需的时间更长,也就是说,网站似乎需要更长的时间来 ...

  3. qimage加载bmp图片_批量修改图片大小,我发现了最简单的方法!

    点击上方蓝字  关注我们 批量调整图片大小的软件很多很多,但很多时候我仅仅对图片做些小修改,而不需要那么多强大的功能,要的是实用,而不是有多华丽,然后运行速度快,也是我们所追求的,不要批处理图片的时候 ...

  4. 【QT】添加图片资源并使用QImage加载图片显示

    文章目录 一.QT工程添加图片资源 二.QT工程使用QImage加载图片显示 一.QT工程添加图片资源 到了此步,按下Ctrl+s按键即可. 此时可看到工程下多了以下文件. 二.QT工程使用QImag ...

  5. Qt Creator加载占位符数据

    Qt Creator加载占位符数据 加载占位符数据 使用虚拟模型 创建虚拟上下文 加载占位符数据 设计模式支持视图,模型和委托,因此,当您添加网格视图,列表视图或路径视图项时,将自动添加ListMod ...

  6. android webview 像素,Android:在WebView中加载的图像中的像素质量降低

    我正在为移动浏览器构建Javascript应用程序(不包装为原生应用程序). 我注意到,如果图像尺寸超过特定阈值(宽度超过1400像素左右),Android(经过测试的2.3模拟器和Galaxy S设 ...

  7. Qt同时加载多个项目

    Qt同时加载多个项目 如何将多个项目使用一个.pro文件启动起来? 新建一个.pro文件,加入如下几行: TEMPLATE = subdirs SUBDIRS += ComboBox/ComboBox ...

  8. QT实现加载百度离线地图

    在Qt中加载百度地图需要用到网络浏览器,在此采用webEngine模块,然后用webchannel进行qt与HTML/JavaScript的交互. 需求描述:软件加载百度地图,用鼠标在地图上选点,并进 ...

  9. html加载超大像素图片,html – 首先加载低分辨率背景图像,然后加载高分辨率图像...

    这是我使用的方法 CSS: #div_whatever { position: whatever; background-repeat: no-repeat; background-position: ...

最新文章

  1. ASP.NET MVC Music Store教程(1):概述和新项目
  2. 学霸大佬整理,超全 Python 学习路线图(附工具+视频+书籍+面试)
  3. 在Python中使用Seaborn和WordCloud可视化YouTube视频
  4. 关于在asp.net中textbox文本输入框中的汉语标点符号显示位置的问题
  5. Easyui Datagrid相同连续列合Demo之三
  6. 加密软件漏洞评测系统_苹果向用户推送macOS Big Sur 11.0.1正式版系统_华强北软件网_软件行情_软件新闻_软件评测_手机应用文章...
  7. UI设计实用素材|iPhone样机模型(展示你的应用程序、网站或用户界面的完美方式。
  8. MySQL高级知识(十四)——行锁
  9. 中国凝血测试耗材行业市场供需与战略研究报告
  10. Android动画居然还能这么写
  11. 怎么用python下载网易云_如何使用python批量下载网易云音乐的免费音乐
  12. 干了半年的java Web,知道自己特别喜欢游戏开发,那就去干吧
  13. 服务器CPU使用率过高排查与解决思路
  14. 上市公司股息红利差别化个人所得税政策
  15. IDEA中maven项目dependencies报错飘红问题解决
  16. 复旦大学计算机学院教师简介,复旦大学计算机科学技术学院导师教师师资介绍简介-危辉...
  17. arcgis 将地图点转换为屏幕坐标_ArcGIS地图投影和坐标转换方法
  18. canvas重力小球 html+css+js
  19. 阿里云ECS云盘在线扩容
  20. 疲劳驾驶样本集_上海6辆集卡车追尾起火,集卡事故为何频发? | 港口圈

热门文章

  1. CC2541修改蓝牙名称为中文名称
  2. 我所参加的最贵的培训
  3. 物联卡注销的方法有哪些
  4. 02_ACS550变频器RS485Modbus通信-通信命令
  5. OCJP题库1Z0-851(21/30)
  6. VM虚拟机系统自定义分区
  7. 一个简单的软件测试流程(附带流程详解)
  8. go程序设计语言第四章-组合类型
  9. kindle无法开机
  10. 工业和信息化部教育与考试中心证书有用吗怎么报考 ?