【Qt】QImage实战

QImage::Format_Mono, QImage::Format_RGB32, QImage::Format_ARGB32, QImage::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_Mono 1 bit 黑白图像、文档打印 极低内存,仅黑白
Format_RGB555 16 bit 低资源设备彩色图像 色彩有限,内存少
Format_RGB32 32 bit 全彩图像显示 色彩丰富,无透明
Format_ARGB32 32 bit 支持透明度的图像处理 原始 Alpha 数据
Format_ARGB32_Premultiplied 32 bit GPU 渲染、快速合成 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_ARGB32Format_ARGB32_Premultiplied

相关推荐
星云数灵11 小时前
大模型高级工程师考试练习题6
人工智能·大模型·大模型工程师·阿里云大模型aca·阿里云大模型工程师acp·大模型acp考试题库·acp认证
全栈技术负责人11 小时前
AI时代前端工程师的转型之路
前端·人工智能
三万棵雪松11 小时前
【AI小智硬件程序(四)】
人工智能·嵌入式·esp32·ai小智
亚里随笔11 小时前
GenEnv:让AI智能体像人一样在_游戏_中成长
人工智能·游戏·llm·rl·agentic
少林码僧11 小时前
2.29 XGBoost、LightGBM、CatBoost对比:三大梯度提升框架选型指南
人工智能·机器学习·ai·数据挖掘·数据分析·回归
喝拿铁写前端11 小时前
当 AI 会写代码之后,我们应该怎么“管”它?
前端·人工智能
春日见11 小时前
控制算法:PP(纯跟踪)算法
linux·人工智能·驱动开发·算法·机器学习
沫儿笙11 小时前
ABB焊接机器人混合气体节气方案
人工智能·机器人
余俊晖11 小时前
多页文档理解强化学习设计思路:DocR1奖励函数设计与数据构建思路
人工智能·语言模型·自然语言处理
Yeats_Liao12 小时前
MindSpore开发之路(二十六):系列总结与学习路径展望
人工智能·深度学习·学习·机器学习