news 2026/6/14 21:08:39

PySide6/PyQt5,QImage 和 QPixmap 的关系与区别

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PySide6/PyQt5,QImage 和 QPixmap 的关系与区别

首先用通俗的方式解释:

  • QImage:是 “后台” 图像类,专注于像素级的图像数据处理,运行在 CPU 上,不依赖 GUI 渲染线程,适合图像的读写、修改、像素操作,它注重的是“图像文件的像素数据”
  • QPixmap:是 “前台” 图像类,专注于高效的 GUI 显示,针对屏幕渲染做了优化(尤其是在不同平台上的硬件加速),运行在 GUI 线程,适合直接在界面上绘制、显示,它注重的是“屏幕显示的内容”

两者的核心关系是:

  • 可以相互转换,通常的开发模式是 “用 QImage 处理图像,转成 QPixmap 显示”。

1. 核心特性对比

特性QImageQPixmap
主要用途图像数据处理、像素操作、IO 读写GUI 界面显示、渲染(标签、画布)
线程安全线程安全(可在非 GUI 线程使用)非线程安全(仅能在主线程使用)
内存管理基于 CPU 内存基于 GPU / 显存(平台优化)
像素访问支持直接读写单个像素不支持高效的像素级操作
平台依赖跨平台一致,无依赖依赖平台的绘图系统(自动优化)

2. 相互转换的代码示例

这是最常用的场景,先通过 QImage 读取 / 处理图像,再转 QPixmap 显示:

import sys from PySide6.QtWidgets import QApplication, QLabel, QWidget, QVBoxLayout from PySide6.QtGui import QImage, QPixmap class ImageDemo(QWidget): def __init__(self): super().__init__() self.init_ui() def init_ui(self): self.setWindowTitle("QImage & QPixmap 示例") layout = QVBoxLayout() # 1. 用QImage读取图像(处理层面) # 支持的格式:png/jpg/bmp/gif等,可直接读取文件或字节流 image = QImage("test.png") if image.isNull(): # 检查图像是否加载成功 print("图像加载失败!") return # 对QImage进行像素级处理(示例:调整尺寸) processed_image = image.scaled(400, 300, aspectRatioMode=1) # 2. 转换为QPixmap(显示层面) pixmap = QPixmap.fromImage(processed_image) # 3. 用QLabel显示QPixmap label = QLabel() label.setPixmap(pixmap) layout.addWidget(label) self.setLayout(layout) self.resize(400, 300) if __name__ == "__main__": app = QApplication(sys.argv) window = ImageDemo() window.show() sys.exit(app.exec())
关键代码解释:
  • QImage("test.png"):从文件加载图像,返回 QImage 对象,可进行像素操作(如pixel(x,y)读取像素、setPixel(x,y, color)修改像素)。
  • QPixmap.fromImage(processed_image):将处理后的 QImage 转换为 QPixmap,这是最常用的转换方式。
  • 反向转换(QPixmap 转 QImage):image = pixmap.toImage(),适合将显示的图像转回 QImage 做后续处理。

3. 典型使用场景

  • 使用 QImage 的场景

    1. 读取 / 写入图像文件(如 jpg/png);
    2. 逐像素修改图像(如滤镜、抠图、像素值计算);
    3. 在非 GUI 线程中处理图像(避免阻塞主线程);
    4. 处理原始图像数据(如从摄像头、网络获取的字节流)。
  • 使用 QPixmap 的场景

    1. 在 QLabel、QPushButton、QPainter 中显示图像;
    2. 图像的屏幕渲染(自动适配高 DPI、硬件加速);
    3. 临时缓存需要频繁显示的图像(优化渲染性能)。

总结

  1. 核心定位:QImage 负责 “处理图像数据”,QPixmap 负责 “显示图像”,两者是 “处理 - 显示” 的协作关系。
  2. 线程安全:QImage 可在非主线程使用,QPixmap 仅能在 GUI 主线程使用
  3. 转换方式:通过QPixmap.fromImage()pixmap.toImage()实现双向转换,是 PySide6 中图像编程的核心操作。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/14 2:32:52

一文说清Multisim示波器的时间基准设置原理

你提供的这篇博文内容非常扎实、专业,技术深度和逻辑结构都已达到较高水准。但作为一篇面向工程师群体的 技术传播型文章 (而非学术论文),它在 可读性、传播力、教学引导性与人味表达 上仍有较大优化空间。下面是我以资深嵌入式/EDA教学博主身份,为你全面润色重构后的…

作者头像 李华
网站建设 2026/6/14 2:03:54

minicom在Linux下串口调试的核心要点

以下是对您提供的博文内容进行 深度润色与结构重构后的技术文章 。整体遵循“去AI化、强工程感、重逻辑流、轻格式化”的原则,摒弃模板式章节标题,以真实开发者视角展开叙述,融合原理剖析、实战陷阱、调试心法与底层机制解读,语言自然流畅如资深工程师现场分享,同时严格…

作者头像 李华
网站建设 2026/6/14 5:08:53

Qwen1.5-0.5B本地化部署:内网环境适配实战

Qwen1.5-0.5B本地化部署:内网环境适配实战 1. 为什么小模型在内网里反而更“能打” 你有没有遇到过这样的情况:在客户现场做AI集成,对方明确要求所有服务必须跑在隔离内网,不连外网、不装GPU、甚至不允许访问ModelScope或Huggin…

作者头像 李华
网站建设 2026/6/14 2:30:31

环路稳定性判断标准:基于波特图的通俗解释

以下是对您提供的博文《环路稳定性判断标准:基于波特图的通俗解释》进行 深度润色与专业重构后的版本 。本次优化严格遵循您的全部要求: ✅ 彻底去除AI痕迹,语言自然、有呼吸感、带工程师口吻 ✅ 打破“引言-原理-应用-总结”的模板化结构,以真实工程逻辑为主线重组内容…

作者头像 李华
网站建设 2026/6/14 2:05:56

深度剖析HBuilderX安装流程:uni-app环境必备步骤

以下是对您提供的博文内容进行 深度润色与结构重构后的技术文章 。整体风格更贴近一位资深嵌入式/全栈工程师在技术社区中自然、专业、有温度的分享,去除了模板化表达和AI痕迹,强化了逻辑链条、实战细节与工程直觉,并严格遵循您提出的全部优化要求(无“引言”“总结”等程…

作者头像 李华
网站建设 2026/6/12 15:10:04

Unsloth更新日志解读:新特性对微调效率的影响分析

Unsloth更新日志解读:新特性对微调效率的影响分析 1. Unsloth 是什么:让大模型微调真正“轻装上阵” Unsloth 不是一个新名字,但它的进化速度让人惊讶。它不是一个泛泛而谈的训练工具包,而是一套专为大语言模型(LLM&…

作者头像 李华