【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

相关推荐
m0_5711866019 小时前
第三十四周周报
人工智能
AI资源库19 小时前
microsoftVibeVoice-ASR模型深入解析
人工智能·语言模型
jarvisuni19 小时前
开发“360安全卫士”,Opus4.6把GPT5.3吊起来打了?!
人工智能·gpt·ai编程
kyle~19 小时前
深度学习---长短期记忆网络LSTM
人工智能·深度学习·lstm
xrgs_shz19 小时前
什么是LLM、VLM、MLLM、LMM?它们之间有什么关联?
人工智能·计算机视觉
DatGuy19 小时前
Week 36: 量子深度学习入门:辛量子神经网络与物理守恒
人工智能·深度学习·神经网络
说私域19 小时前
日本零售精髓赋能下 链动2+1模式驱动新零售本质回归与发展格局研究
人工智能·小程序·数据挖掘·回归·流量运营·零售·私域运营
千里马也想飞19 小时前
汉语言文学《朝花夕拾》叙事艺术研究论文写作实操:AI 辅助快速完成框架 + 正文创作
人工智能
玉梅小洋19 小时前
解决 VS Code Claude Code 插件「Allow this bash command_」弹窗问题
人工智能·ai·大模型·ai编程
肾透侧视攻城狮19 小时前
《解锁计算机视觉:深度解析 PyTorch torchvision 核心与进阶技巧》
人工智能·深度学习·计算机视觉模快·支持的数据集类型·常用变换方法分类·图像分类流程实战·视觉模快高级功能