【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

相关推荐
聚客AI9 分钟前
搜索引擎vs向量数据库:LangChain混合检索架构实战解析
人工智能·pytorch·语言模型·自然语言处理·数据分析·gpt-3·文心一言
云畅新视界22 分钟前
从 CODING 停服到极狐 GitLab “接棒”,软件研发工具市场风云再起
人工智能·gitlab
一ge科研小菜鸡27 分钟前
人工智能驱动下的可再生能源气象预测:构建绿色能源时代的新大脑
人工智能·能源
高压锅_122038 分钟前
Cursor+Coze+微信小程序实战: AI春联生成器
人工智能·微信小程序·notepad++
XiaoQiong.Zhang39 分钟前
数据分析框架和方法
人工智能
TY-20251 小时前
三、神经网络——网络优化方法
人工智能·深度学习·神经网络
Jamence1 小时前
多模态大语言模型arxiv论文略读(156)
论文阅读·人工智能·语言模型·自然语言处理·论文笔记
哔哩哔哩技术1 小时前
IndexTTS2:用极致表现力颠覆听觉体验
人工智能
GengMS_DEV1 小时前
使用开源kkfileview实现电子档案文件的万能预览/水印等功能
人工智能