当前位置: 首页 > news >正文

【Qt】QImage实战

QImage::Format_MonoQImage::Format_RGB32QImage::Format_ARGB32QImage::Format_ARGB32_Premultiplied, 和 QImage::Format_RGB555 是 Qt 中不同的图像像素格式,它们在存储方式、颜色深度、是否支持透明通道以及适用场景上各有不同。下面是它们的详细对比:


1. Format_Mono

  • 描述:每个像素用 1 位表示,0 表示黑色,1 表示白色。
  • 内存占用:1 bit per pixel (BPP)
  • 是否支持透明度:否
  • 是否使用调色板:否(黑白固定)
  • 用途
    • 单色图像(如黑白文档、线条图)
    • 节省内存(适合嵌入式或低资源环境)
  • 优点
    • 极低内存占用
  • 缺点
    • 只能显示黑白两色

2. Format_RGB555

  • 描述:每个像素用 16 位表示,RGB 各占 5 位,共 32768 种颜色。
  • 内存占用:16 BPP
  • 是否支持透明度:否
  • 是否使用调色板:否
  • 用途
    • 需要彩色但内存有限的场景(如老式图形硬件)
    • 游戏开发中早期使用的颜色格式
  • 优点
    • 比 RGB32 更节省内存
  • 缺点
    • 色彩质量较低(只有 32K 色)

3. Format_RGB32

  • 描述:每个像素用 32 位表示,R、G、B 各占 8 位,剩下 8 位未使用。
  • 内存占用:32 BPP
  • 是否支持透明度:否(虽然有 8 位空闲,但不用于 Alpha)
  • 是否使用调色板:否
  • 用途
    • 显示全彩色图像(不含透明度)
    • 图像处理和渲染
  • 优点
    • 支持高质量色彩
    • 直接操作 RGB 像素值方便
  • 缺点
    • 内存消耗大

4. Format_ARGB32

  • 描述:每个像素用 32 位表示,A(Alpha)、R、G、B 各占 8 位,Alpha 未预乘到颜色中
  • 内存占用:32 BPP
  • 是否支持透明度:是(Alpha 通道)
  • 是否使用调色板:否
  • 用途
    • 支持透明通道的图像处理
    • UI 绘制、图层合成前的准备阶段
  • 优点
    • 支持完整透明度信息
    • 原始色彩数据清晰,便于编辑
  • 缺点
    • 不利于直接用于 GPU 渲染(需额外转换为预乘格式)

5. Format_ARGB32_Premultiplied

  • 描述:同样是 32 位,但 Alpha 已经预乘到 R、G、B 中
    • R = R_original × A / 255
    • G = G_original × A / 255
    • B = B_original × A / 255
  • 内存占用:32 BPP
  • 是否支持透明度:是
  • 是否使用调色板:否
  • 用途
    • GPU 加速渲染(如 OpenGL、DirectX)
    • 快速图像混合与合成
  • 优点
    • 渲染效率高(避免运行时计算预乘)
  • 缺点
    • 编辑不便(颜色分量已被修改)

📌 总结对比表

格式内存/像素是否透明是否调色板主要用途特点
Format_Mono1 bit黑白图像、文档打印极低内存,仅黑白
Format_RGB55516 bit低资源设备彩色图像色彩有限,内存少
Format_RGB3232 bit全彩图像显示色彩丰富,无透明
Format_ARGB3232 bit支持透明度的图像处理原始 Alpha 数据
Format_ARGB32_Premultiplied32 bitGPU 渲染、快速合成Alpha 预乘,渲染高效

✅ 使用建议

场景推荐格式
简单黑白图像(如图标、遮罩)Format_Mono
彩色图像处理(含 UI 设计、绘图工具)Format_RGB32
支持透明度的图像处理(如 PNG)Format_ARGB32
GPU 渲染、视频输出、快速合成Format_ARGB32_Premultiplied
旧设备兼容性需求Format_RGB555

🔧 示例:格式转换

QImage image("input.png");
QImage rgbaImage = image.convertToFormat(QImage::Format_ARGB32); // 支持透明度
QImage rgb32Image = image.convertToFormat(QImage::Format_RGB32); // 去掉透明度
QImage monoImage = image.convertToFormat(QImage::Format_Mono);   // 转换为黑白

🧠 小贴士

  • 预乘 Alpha 的优势:在进行图像叠加、混合等操作时,GPU 或渲染引擎可以直接使用预乘后的颜色值,无需额外计算。
  • 非预乘的优势:保留原始颜色信息,适合图像编辑器、设计软件。
  • Mono 适用于打印机或热敏纸场景:如你当前项目中的打印缓冲区绘制。

如你的代码中有 image.fill(Qt::transparent),说明你希望支持透明背景,推荐使用 Format_ARGB32 或 Format_ARGB32_Premultiplied

http://www.xdnf.cn/news/566983.html

相关文章:

  • 一文读懂迁移学习:从理论到实践
  • Git Clone 原理详解:为什么它比本地文件复制更快? -优雅草卓伊凡
  • word格式相关问题
  • C语言——函数递归与迭代
  • 微调后的模型保存与加载
  • Android13 wifi设置国家码详解
  • 结课作业01. 用户空间 MPU6050 体感鼠标驱动程序
  • SuperVINS:应对挑战性成像条件的实时视觉-惯性SLAM框架【全流程配置与测试!!!】【2025最新版!!!!】
  • flink 提交流程
  • 基于Flink的数据中台管理平台
  • CNN手写数字识别/全套源码+注释可直接运行
  • 基于moonshot模型的Dify大语言模型应用开发核心场景
  • 如何成为更好的自己?
  • AI智能分析网关V4玩手机检测算法精准管控人员手机行为,搭建智慧化安防监管体系
  • iOS 15.4.1 TrollStore(巨魔商店)安装教程详解:第二篇
  • Ubuntu学习记录
  • vscode打开vue + element项目
  • ADB常用语句
  • springboot 1.x2.x依赖spring版本
  • 初识Linux · 五种IO模型和非阻塞IO
  • Flink基本理解
  • 初识Linux · NAT 内网穿透 内网打洞 代理
  • 【题解-洛谷】B4240 [海淀区小学组 2025] 最短字符串
  • buunctf Crypto-[NCTF2019]Keyboard1
  • 腾讯游戏安全与高通合作构建PC端游安全新格局
  • 改写视频生产流程!快手SketchVideo开源:通过线稿精准控制动态分镜的AI视频生成方案
  • Java开发-如何将一个字符串转换成一个数组,又如何把他转换成一个集合
  • Linux中I/O复用机制epoll
  • 【Netty】- 入门2
  • dify基于文本模型实现微调Fine-tune语料构造工作流