Qt中的绘图设备:QPixmap、QImage 和 QPicture(详细图文教程_附代码)

在这里插入图片描述

💪 图像算法工程师,专业从事且热爱图像处理,图像处理专栏更新如下👇:
📝《图像去噪》
📝《超分辨率重建》
📝《语义分割》
📝《风格迁移》
📝《目标检测》
📝《图像增强》
📝《模型优化》
📝《模型实战部署》
📝《图像配准融合》
📝《数据集》
📝《高效助手》
📝《C++》
📝《Qt》


在这里插入图片描述

目录

  • 一、QPixmap
    • 1.1 主要特点
    • 1.2 常用方法
    • 1.3 示例
  • 二、QImage
    • 2.1 主要特点
    • 2.2 常用方法
    • 2.3 示例
  • 三、QPicture
    • 3.1 主要特点
    • 3.2 常用方法
    • 3.3 示例
  • 四、总结

在 Qt 中,QPixmap、QImage 和 QPicture 都是与图像相关的类,但它们有不同的用途和特点。下面详细介绍它们的区别、用途以及如何在 Qt 中使用它们。

一、QPixmap

QPixmap 是一个图像缓存类,主要用于图形界面的显示。它被优化用于在屏幕上渲染图像(例如,显示在 QLabel、QPushButton 等控件上),尤其适用于显示图像和处理图像渲染。通常,QPixmap 在绘图时用于绘制到屏幕或其他图形设备。

1.1 主要特点

优化显示性能:QPixmap 是为图形设备(如屏幕)优化的,通常比 QImage 更适合用于显示图像。

设备依赖:它的内容与设备相关(例如显示设备、图形硬件)。

不直接用于处理图像数据:它并不适合用来进行图像处理。

1.2 常用方法

加载和显示图像:

QPixmap pixmap(":/images/image.png");
QLabel *label = new QLabel;
label->setPixmap(pixmap);

绘制到QPainter:

QPainter painter(this);
QPixmap pixmap(":/images/image.png");
painter.drawPixmap(0, 0, pixmap);

1.3 示例

下面使用QPixmap绘图,保存到指定路径后用电脑端的软件打开保存的绘图:

在这里插入图片描述

在这里插入图片描述

二、QImage

QImage 是一个图像类,主要用于图像数据的处理和转换。它提供了更灵活的图像数据访问,可以直接操作像素数据(例如读取、修改像素)。QImage 更适合用于图像处理任务,而不是显示任务。

2.1 主要特点

适用于图像处理:QImage 提供了对图像像素的直接访问,允许你进行图像操作、修改像素值等。

无设备依赖:与 QPixmap 不同,QImage 是设备无关的,可以在多个设备上使用。

可转换为其他格式:QImage 可以与其他图像处理库(如 OpenCV)一起使用,也可以轻松转换为 QPixmap 进行显示。

2.2 常用方法

加载和处理图像:

QImage image(":/images/image.png");
for (int y = 0; y < image.height(); ++y) {
    for (int x = 0; x < image.width(); ++x) {
        QColor color(image.pixel(x, y));
        // 修改颜色
        image.setPixel(x, y, color.rgb());
    }
}

绘制到 QPainter:

QPainter painter(this);
QImage image(":/images/image.png");
painter.drawImage(0, 0, image);

2.3 示例

下面使用QImage绘图 :

在这里插入图片描述

下面利用QImage对像素值就行修改:

在这里插入图片描述

在这里插入图片描述

三、QPicture

QPicture 是 Qt 提供的一个用于记录绘图命令的类。与 QPixmap 和 QImage 不同,QPicture 不包含图像数据,而是记录了一系列绘图操作(如线条、矩形、路径等)。这些命令可以稍后重新播放(即重新绘制),因此非常适用于绘图命令的存档和回放。

3.1 主要特点

记录绘图命令:QPicture 记录一系列绘图命令,可以稍后回放这些命令。

适用于复杂绘制:你可以将多个绘图操作记录为一个 QPicture,然后在需要时回放,以实现复用或延迟渲染。

与设备无关:与 QPixmap 和 QImage 不同,QPicture 主要记录绘制操作,而不是图像本身,因此可以用于保存和共享绘制命令。

3.2 常用方法

创建并保存绘图命令:

QPicture picture;
QPainter painter(&picture);
painter.setPen(Qt::blue);
painter.drawRect(10, 10, 100, 100);
painter.end();
picture.save("drawing.zt");

播放绘图命令:

QPicture picture;
picture.load("drawing.pic");
QPainter painter(this);
painter.drawPicture(0, 0, picture);

3.3 示例

下面是QPicture绘图并显示:

在这里插入图片描述

绘图过程保存的.zt图像用电脑软件打不开,只能通过绘图指令在Qt软件中打开:

在这里插入图片描述

四、总结

以上就是Qt中的绘图设备:QPixmap、QImage 和 QPicture。

其中QPixmap 适用于需要快速显示图像的场景,尤其是与图形硬件紧密交互的应用。

QImage 适合进行图像处理、像素级操作,特别是在需要修改图像数据或与其他图像处理库(如 OpenCV)集成时使用。

QPicture 用于存储绘图命令,并可以将这些命令回放到不同的设备或场景中,适用于绘图操作的存档和共享。

感谢您阅读到最后!😊总结不易,多多支持呀🌹 点赞👍收藏⭐评论✍️,您的三连是我持续更新的动力💖

关注下面「视觉研坊」,获取干货教程、实战案例、技术解答、行业资讯!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/966416.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

w199疫情打卡健康评测系统设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

JAVA:Spring Boot 集成 Disruptor 的技术指南

1、简述 在高并发应用中&#xff0c;传统的队列机制如 BlockingQueue 在面对大量请求时容易成为系统瓶颈。而 LMAX Disruptor 是一个高效的无锁队列&#xff0c;适合用来构建高吞吐、低延迟的事件处理系统。本文将介绍如何在 Spring Boot 中集成 Disruptor&#xff0c;并列出详…

使用AI工具(Deepseek or 豆包etc)话业务流程图

①打开AI工具&#xff0c;这里以Deepseek为例子&#xff1a; Deepseek官网 ②输入所要画图的业务流程的文字。 &#xff08;这里以一个用户登录的流程的文字作为例子&#xff09; mermaid在线画图网页&#xff08;根据AI工具对应生成的画图代码&#xff09; ③把AI工具生成的…

自动化测试工具:selenium

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 Selenium是一个用于Web应用程序测试的工具。是一个开源的Web的自动化测试工具&#xff0c;最初是为网站自动化测试而开发的&#xff0c;类型像我们玩游戏用的按键…

UIAbility 生命周期方法

生命周期流程图 UIAbility的生命周期官方文档地址https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/uiability-lifecycle-V13 1. onCreate(want: Want, launchParam: LaunchParam) 触发时机&#xff1a;Ability首次创建时 作用&#xff1a;初始化核心资源…

C语言:函数栈帧的创建和销毁

目录 1.什么是函数栈帧2.理解函数栈帧能解决什么问题3.函数栈帧的创建和销毁的过程解析3.1 什么是栈3.2 认识相关寄存器和汇编指令3.3 解析函数栈帧的创建和销毁过程3.3.1 准备环境3.3.2 函数的调用堆栈3.3.3 转到反汇编3.3.4 函数栈帧的创建和销毁 1.什么是函数栈帧 在写C语言…

开箱即用的.NET MAUI组件库 V-Control 发布了!

之前写过挺多的MAUI Sample&#xff0c;其中有很多代码可以打包成组件&#xff0c;当组件完善到一定程度&#xff0c;我会把控件封装起来放到控件库中。 今天&#xff0c;在这个仓库建立一年零八个月后&#xff0c;我觉得可以考虑将其作为开源库发布。 有很多网友在观望.NET …

Qt:项目文件解析

目录 QWidget基础项目文件解析 .pro文件解析 widget.h文件解析 widget.cpp文件解析 widget.ui文件解析 main.cpp文件解析 认识对象模型 窗口坐标系 QWidget基础项目文件解析 .pro文件解析 工程新建好之后&#xff0c;在工程目录列表中有⼀个后缀为 ".pro" …

装备库室管控系统|支持国产化、自主研发

装备库室管控系统&#xff08;DW-S306&#xff09;利用现有内部网络&#xff0c;部署综合管理系统&#xff0c;形成一套上下统一、功能完善的管理体系&#xff0c;建设一个功能完善、规范有序为目标&#xff0c;实现可视化监管、数字化军械管理、安全监管于一体的物联网信息化管…

软件测试就业

文章目录 2.6 初识一、软件测试理论二、软件的生产过程三、软件测试概述四、软件测试目的五、软件开发与软件测试的区别&#xff1f;六、学习内容 2.7 理解一、软件测试的定义二、软件测试的生命周期三、软件测试的原则四、软件测试分类五、软件的开发与测试模型1.软件开发模型…

【Java基础】序列化、反序列化和不可变类

Hi~&#xff01;这里是奋斗的明志&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f331;&#x1f331;个人主页&#xff1a;奋斗的明志 &#x1f331;&#x1f331;所属专栏&#xff1a;Java基础面经 &#x1f4da;本系列文章为个…

upx压缩工具使用说明

UPX&#xff08;Ultimate Packer for Executables&#xff09;是一款开源的可执行文件打包工具&#xff0c;能够将可执行文件&#xff08;如Windows的.exe文件或Linux的ELF文件&#xff09;进行压缩&#xff0c;以减少文件大小&#xff0c;并增加反逆向工程的难度。 下载相关安…

DeepSeek-R1 32B Windows+docker本地部署

最近国产大模型DeepSeek兴起&#xff0c;本地部署了一套deepseek同时集成Open WebUI界面,给大家出一期教程。 软件&#xff1a;Ollama、docker、Open WebUI 一、用Ollama下载模型 首先我们需要安装Ollama&#xff0c;它可以在本地运行和管理大模型。 到Ollama官网 https://ol…

活动预告 |【Part 2】Microsoft 安全在线技术公开课:通过扩展检测和响应抵御威胁

课程介绍 通过 Microsoft Learn 免费参加 Microsoft 安全在线技术公开课&#xff0c;掌握创造新机遇所需的技能&#xff0c;加快对 Microsoft Cloud 技术的了解。参加我们举办的“通过扩展检测和响应抵御威胁”技术公开课活动&#xff0c;了解如何更好地在 Microsoft 365 Defen…

(2024|CVPR,MLLM 幻觉)OPERA:通过过度信任惩罚和回顾分配缓解多模态大型语言模型中的幻觉

OPERA: Alleviating Hallucination in Multi-Modal Large Language Models via Over-Trust Penalty and Retrospection-Allocation 目录 1. 引言 2. 相关研究 2.1 多模态大语言模型 2.2 LLM 的幻觉与解决方案 2.3. 语言模型中的解码策略 3. 方法 3.1 MLLM 生成过程 3.2…

激活函数篇 03 —— ReLU、LeakyReLU、ELU

本篇文章收录于专栏【机器学习】 以下是激活函数系列的相关的所有内容: 一文搞懂激活函数在神经网络中的关键作用 逻辑回归&#xff1a;Sigmoid函数在分类问题中的应用 整流线性单位函数&#xff08;Rectified Linear Unit, ReLU&#xff09;&#xff0c;又称修正线性单元&a…

C++20新特性

作者&#xff1a;billy 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 前言 C20 是 C 标准中的一个重要版本&#xff0c;引入了许多新特性和改进&#xff0c;包括模块&#xff08;Modules&#xff09;、协程…

新增md、html压缩文档上传,开放接口访问密钥改为多个,zyplayer-doc 2.4.7 发布啦!

zyplayer-doc是一款适合企业和个人使用的WIKI知识库管理工具&#xff0c;支持在线编辑富文本、Markdown、表格、Office文档、API接口、思维导图、Drawio以及任意的文本文件&#xff0c;专为私有化部署而设计&#xff0c;最大程度上保证企业或个人的数据安全&#xff0c;支持以内…

ES管理器焕新升级:紫色银狼主题来袭!

ES管理器&#xff08;安卓版&#xff09;迎来了一次令人眼前一亮的改头换面&#xff01;此次更新最直观的变化集中在UI界面设计上。开发团队大胆突破&#xff0c;摒弃了以往稍显平庸的风格&#xff0c;引入了极具个性的全新主题——以热门游戏《崩坏&#xff1a;星穹铁道》中的…

SwiftUI 学习 Toggle 遇到的问题

最近学习SwifyUI&#xff0c;心中存疑&#xff0c;于是记录这些问题 List {Toggle(isOn: $showFavoriteOnly) {Text("Favorite only")}ForEach(filterLandmarks) { landmark in// 在 NavigationLink 中&#xff0c;label 是用于指定导航链接显示内容的部分Navigati…