绘图设备 QPixmap、QBitmap QImage

了解 Qt 绘图设备QPixmap、QBitmap、QImage和 QPicture 了解 Qt 绘图设备QPixmap、QBitmap、QImage和 QPicture 绘图设备是指继承QPaintDevice的子类,分别是QPixmap、QBitmap、QImage和 QPicture。四个不同的派生类主要功能也不同,其中, QPixmap专门为图像在屏幕上的显示做了优化; QBitmap是QPixmap的一个子类,它的色深限定为1,可以使用 QPixmap的isQBitmap()函数来确定这个QPixmap是不是一个QBitmap; QImage专门为图像的像素级访问做了优化; QPi 阅读详情
绘图设备是指继承QPainterDevice的子类。Qt一共提供了四个这样的类,分别是 QPixmap、QBitmap、QImage和QPicture。其中, QPixmap专门为图像在屏幕上的显示做了优化, 而QBitmap是QPixmap的一个子类,它的色深限定为1,你可以使用QPixmap的isQBitmap()函数来确定这个QPixmap是不是一个QBitmap。QImage专门为图像的像素级访问做了优化。QPicture则可以记录和重现QPainter的各条命令。下面我们将分两部分介绍这四种绘图设备。


QPixmap继承了QPaintDevice,因此,你可以使用QPainter直接在上面绘制图形。QPixmap也可以接受一个字符串作为一个文件的路径来显示这个文件,比如你想在程序之中打开png、jpeg之类的文件,就可以使用QPixmap。使用QPainter的drawPixmap()函数可以把这个文件绘制到一个QLabel、QPushButton或者其他的设备上面。QPixmap是针对屏幕进行特殊优化的,因此,它与实际的底层显示设备息息相关。注意,这里说的显示设备并不是硬件,而是操作系统提供的原生的绘图引擎。所以,在不同的操作系统平台下,QPixmap的显示可能会有所差别。
 
QPixmap提供了静态的grabWidget()和grabWindow()函数,用于将自身图像绘制到目标上。同时,在使用QPixmap时,你可以直接使用传值也不需要传指针,因为QPixmap提供了“隐式数据共享”。关于这一点,我们会在以后的章节中详细描述,这里只要知道传递QPixmap不必须使用指针就好了。
 
QBitmap继承自QPixmap,因此具有QPixmap的所有特性。QBitmap的色深始终为1. 色深这个概念来自计算机图形学,是指用于表现颜色的二进制的位数。我们知道,计算机里面的数据都是使用二进制表示的。为了表示一种颜色,我们也会使用二进制。比如我们要表示8种颜色,需要用3个二进制位,这时我们就说色深是3. 因此,所谓色深为1,也就是使用1个二进制位表示颜色。1个位只有两种状态:0和1,因此它所表示的颜色就有两种,黑和白。所以说,QBitmap实际上是只有黑白两色的图像数据。
 
由于QBitmap色深小,因此只占用很少的存储空间,所以适合做光标文件和笔刷。
 
下面我们来看同一个图像文件在QPixmap和QBitmap下的不同表现:
 
void PaintedWidget::paintEvent(QPaintEvent * event)
{
        QPainter painter( this);
        QPixmap pixmap( "Cat.png");
        QBitmap bitmap( "Cat.png");
        painter.drawPixmap(10, 10, 128, 128, pixmap);
        painter.drawPixmap(140, 10, 128, 128, bitmap);
        QPixmap pixmap2( "Cat2.png");
        QBitmap bitmap2( "Cat2.png");
        painter.drawPixmap(10, 140, 128, 128, pixmap2);
        painter.drawPixmap(140, 140, 128, 128, bitmap2);
}
 
先来看一下运行结果:
 
 
这里我们给出了两张png图片。Cat.png是没有透明色的纯白背景,而Cat2.png是具有透明色的背景。我们分别使用QPixmap和QBitmap来加载它们。注意看它们的区别:白色的背景在Qbitmap中消失了,而透明色在QBitmap中转换成了黑色;其他颜色则是使用点的疏密程度来体现的。
 
QPixmap使用底层平台的绘制系统进行绘制,无法提供像素级别的操作,而QImage则是使用独立于硬件的绘制系统,实际上是自己绘制自己,因此提供了像素级别的操作,并且能够在不同系统之上提供一个一致的显示形式。
 
 
如上图所示(出自Qt API文档),我们声明了一个QImage对象,大小是3 x 3,颜色模式是RGB32,即使用32位数值表示一个颜色的RGB值,也就是说每种颜色使用8位。然后我们对每个像素进行颜色赋值,从而构成了这个图像。你可以把QImage想象成一个RGB颜色的二维数组,记录了每一像素的颜色。
 
最后一个需要说明的是QPicture。这是一个可以记录和重现QPainter命令的绘图设备。QPicture将QPainter的命令序列化到一个IO设备,保存为一个平台独立的文件格式。这种格式有时候会是“元文件(meta-files)”。Qt的这种格式是二进制的,不同于某些本地的元文件,Qt的pictures文件没有内容上的限制,只要是能够被QPainter绘制的元素,不论是字体还是pixmap,或者是变换,都可以保存进一个picture中。
 
QPicture是平台无关的,因此它可以使用在多种设备之上,比如svg、pdf、ps、打印机或者屏幕。回忆下我们这里所说的QPaintDevice,实际上是说可以有QPainter绘制的对象。QPicture使用系统的分辨率,并且可以调整QPainter来消除不同设备之间的显示差异。
 
如果我们要记录下QPainter的命令,首先要使用QPainter::begin()函数,将QPicture实例作为参数传递进去,以便告诉系统开始记录,记录完毕后使用QPainter::end()命令终止。代码示例如下:
 
QPicture picture;
QPainter painter;
painter.begin(&picture);               // paint in picture
painter.drawEllipse(10,20, 80,70); // draw an ellipse
painter.end();                            // painting done
picture.save( "drawing.pic");         // save picture
 
如果我们要重现命令,首先要使用QPicture::load()函数进行装载:
 
QPicture picture;
picture.load( "drawing.pic");           // load picture
QPainter painter;
painter.begin(&myImage);             // paint in myImage
painter.drawPicture(0, 0, picture);  // draw the picture at (0,0)
painter.end();

本文出自 “豆子空间” 博客,请务必保留此出处http://devbean.blog.51cto.com/448512/239845

QT 之绘图进阶: 图片绘图类QPixmap、QImage、QPicture 绘图设备是指继承 QPaintDevice 的子类,你可以使用 QPainter 直接在其上面绘制图形,Qt 一共提供了四个这样继承 QPaintDevice 的绘图设备类,分别是:QPixmap、QBitmap、QImage和 QPicture。QPixmap专门为图像在屏幕上的显示做了优化;QBitmap是 QPixmap 的一个子类,它的色深限定为 1,你可以使用 QPixmap 的 isQBitmap() 函数来确定这个QPixmap 是不是一个 QBitmap; 阅读详情

相关推荐

Qt 5——绘图和绘图设备

文章目录1 QPainter2 绘图设备QPixmapQBitmapQPixmapQImageQImage与QPixmap的区别QPicture绘图设备总实例 1 QPainter Qt 的绘图系统允许使用相同的 API 在屏幕和其它打印设备上进行绘制。整个绘图系统基于QPainter,QPainterDevice和QPaintEngine三个类。 QPainter用来执行绘制的操作; QPaintDevice是一个二维空间的抽象,这个二维空间允许QPainter在其上面进行绘制,也就是QPainter工作

流楚丶格念的博客 4870

QT GrabWindow截取屏幕

QT 使用GrabWindow截取屏幕,本文提供代码示例和Demo程序。编译环境:QT6/5 运行环境:X64/32 WIN10/11本文作者原创,转载请附上文章出处与本文链接。

断点 3234

Qt图形界面编程中的画面捕捉与监控

在以上代码中,QApplication::desktop()获取当前桌面窗口,winId()返回该窗口的唯一标识符,grabWindow()通过该标识符获取该窗口截图,最终得到的screenshot即为捕捉到的画面。在Qt图形界面编程和计算机视觉的应用中,常常需要实现对屏幕上特定区域的捕捉和监控,以及对捕捉到的画面进行处理。在Qt中,可以使用QTimer类和QWidget::repaint()方法实现画面监控。屏幕捕捉指的是对屏幕上某个区域的截图。以上就是使用Qt实现画面捕捉和监控的详细介绍和代码示例。

CoderExtra的博客 936

Qt 截图抓屏方法

QWidget的render方法 QPixmap pixmap(widget->size()); widget->render(&pixmap); QPixmap的grabWidget方法 QPixmap pic = QPixmap::grabWidget(widget); QPixmap的grabWindow方法 QPixmap pic = QPixm...

哎哟哟也爱技术 1067

【MATLAB强化学习工具箱】学习笔记--在Simulink环境中训练智能体Create Simulink Environment and Train Agent

Simulink中便于搭建各类动力学与控制模型,通过将原有的控制器替换为AI控制器,可以方便使用已有模型,提供增量效果。 本节的重点是如何引入Simulink模型作为env,其他的内容在之前的文章中已有说明。 以水箱模型watertank为例,如下图所示: 采用PI控制器,控制效果如下所示: 将此PI控制器替换为神经网络控制器后,系统架构如下图所示: 具体替换策略如下所示: (1)删去PID控制器; (2)增加RL Agent模块; (3)观测器模块: 观测向量为:,其中...

bear_miao的博客 1万+

Linux系统监控实战:夜莺监控+categraf采集器配置全流程(附常见问题排查)

本文详细介绍了在Linux系统中使用夜莺监控和categraf采集器进行系统监控的全流程配置,包括环境准备、核心配置文件(如config.toml和procstat.toml)详解、服务集成与验证、高级监控配置实战以及常见问题排查。通过实战案例和优化建议,帮助运维人员快速构建高效的监控体系。

xray4的博客 736

Qt学习之路(29): 绘图设备

绘图设备是指继承QPainterDevice的子类。Qt一共提供了四个这样的类,分别是QPixmap、QBitmap、QImage和QPicture。其中,QPixmap专门为图像在屏幕上的显示做了优化,而QBitmap是QPixmap的一个子类,它的色深限定为1,你可以使用QPixmap的isQBitmap()函数来确定这个QPixmap是不是一个QBitmap。QImag...

weixin_34097242的博客 312

华为私有云HCS 8.1.1实战:从镜像制作到云主机发放全流程指南

本文详细解析了华为私有云HCS 8.1.1从镜像制作到云主机发放的全流程实战指南。内容涵盖制作标准化QCOW2镜像、配置云主机规格与主机组、规划外部网络,以及在运营面为租户初始化资源、配置审批流与产品目录。最后,通过用户视角演示了从创建VPC网络到申请、审批并最终绑定EIP访问云主机的完整操作步骤,为运维人员和架构师提供了一套清晰、可落地的HCS部署与管理实践方案。

weixin_29305313的博客 1128

Qt 6.6.1 中 QPixmap::grabWindow() 的用法与替代方案

截取区域的起始坐标(相对于窗口左上角)‌,获取当前窗口的句柄)‌;:截取区域的尺寸,默认。若需截取特定控件(如。表示截取至右下角‌。,避免直接处理窗口句柄。

A185822153的专栏 1257

Arduino+L298N电机驱动模块避坑指南:从接线到PWM调速的5个常见错误

本文详细解析了使用Arduino与L298N电机驱动模块时,从电源配置、跳线帽使用到PWM调速的5个常见错误与避坑指南。重点阐述了如何正确分离逻辑与电机电源、拔掉ENA/ENB跳线帽以实现PWM调速、理解H桥接线逻辑以控制直流电机正反转,并提供优化代码与散热建议,帮助开发者稳定驱动电机。

rust6ferris的博客 562

SAPFiori Elements Analytical List Page 概述

ALP(Analytical List Page)是SAP Fiori提供的一种复合页面类型,结合了分析(图表/KPI)与事务(表格/操作)功能,适用于需要分析后立即执行处理的业务场景(如采购价格监控、销售逾期处理等)。其核心价值在于让用户在同一页面完成从数据洞察到事务处理的闭环,减少应用切换带来的效率损耗。 页面结构包含页头KPI标签、交互式图表和明细表格,通过联动过滤、选择同步等机制实现数据钻取与即时操作。支持标准过滤和可视化过滤,并依赖OData注解(SelectionVariant/Presenta

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 269

QT 绘图设备之QPixmap、QBitmap、QImage、QPicture

QT 绘图设备之QPixmap、QBitmap、QImage、QPicture

路过的熊的博客 1114

Android Audio最全面试题及参考答案(7万字长文)

在 Android 音频系统中,应用通过框架层的 API 发出音频请求,这些请求经过音频服务层的处理,传递到 HAL 层,再由 HAL 层调用音频驱动层与硬件进行交互,最终实现音频的播放、录制等功能。在 Android 音频系统中,应用通过框架层的 API 发出音频请求,这些请求经过音频服务层的处理,传递到 HAL 层,再由 HAL 层调用音频驱动层与硬件进行交互,最终实现音频的播放、录制等功能。音频播放完成事件:当使用 MediaPlayer 等音频播放类播放音频时,音频播放完成后会触发这个事件。

大模型大数据攻城狮的专栏 2604

QT四 资源文件;绘图;绘图设备;qpixmap 和 qimage 转换;QPixmap、QBitmap、QImage和 QPicture的区别

我们现在想在QT的UI控件上显示一些图片,动画文件gif等,如何加载呢?很容易想到的一种方法是从自己的电脑上load,例如我们将文件放在 D://picture/1.png 下,但是如果换了电脑,最终生成的.exe文件能正确的加载这些图片,也需要保证运行.exe的电脑上有 D://picture/1.png这个路径。因此 QT 提供了将资源文件保存到可执行文件内部的方法。

hunandede的博客 1211

代数拓扑与AI架构:AI应用架构师深入探索数学研究如何分析复杂系统的结构特性

随着人工智能技术的飞速发展,AI系统变得越来越复杂。AI应用架构师需要有效的工具和方法来理解、设计和优化这些复杂系统。代数拓扑作为数学的一个分支,提供了独特的视角和技术来分析复杂系统的结构特性。本文旨在帮助AI应用架构师深入了解代数拓扑,以及如何将其应用于AI架构设计中,提升对复杂系统的分析能力。首先,我们会介绍代数拓扑和AI架构相关的核心概念及其联系,通过有趣的故事引入主题,让读者轻松理解复杂概念。接着,深入探讨代数拓扑的核心算法原理,结合具体的编程语言代码示例详细阐述。

大模型应用工坊 670

动力学约束下的运动规划算法——Kinodynamic RRT*算法

动力学约束下的运动规划算法——Kinodynamic RRT*算法

慕羽★的博客 6749

了解三种常见绘图设备QPixmap/QBitmap/QImage

绘图设备 绘图设备是指继承QPaintDevice的子类,你可以使用QPainter直接在其上面绘制图形,Qt一共提供了四个这样继承QPaintDevice的绘图设备类,分别是QPixmap、QBitmap、QImage和 QPicture。 常用QPixmap屏幕上显示图片,Qimage用于传输数据 QPixmap专门为图像在屏幕上的显示做了优化 QBitmap是QPixmap的一个子类 Q...

上单的巨魔 810

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Qt绘图设备QPixMap、QBitMap、QImage、QPicture

/这里保存的后缀任意。

qq_55527904的博客 730

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Qt开发之路24---绘图设备(QPixmap、QBitmap、QImage、QPicture)

一:绘图设备 绘图设备是指继承QPainterDevice的子类。Qt一共提供了四个这样的类,分别是QPixmap、QBitmap、QImage和 QPicture。 QPixmap专门为图像在屏幕上的显示做了优化; QBitmap是QPixmap的一个子类,它的色深限定为1,可以使用 QPixmap的isQBitmap()函数来确定这个QPixmap是不是一个QBitmap; QImage专门为图像的像素级访问做了优化; QPicture可以记录和重现QPainter的各条命令。 二:QPixmap

木木木 的博客 601

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Qt图片绘图类QPixmap、QImage、QPicture

Qt图片绘图类QPixmap、QImage、QPicture

m0_60259116的博客 2445

QT从入门到实战x篇_30_绘图设备(QPixmap、QBitmap、QImage和 QPicture;QPixmap、QBitmap绘制及保存;QImage像素操作;QPicture记录和重现)

绘图设备是指继承QPainterDevice的子类。Qt一共提供了四个这样的类,分别是QPixmap、QBitmap、QImage和 QPicture。

分享学习成长历程,Winter is coming! 751

Qt 图片绘图类 QPixmap、QImage、QPicture

绘图设备是指继承 QPaintDevice 的子类,你可以使用 QPainter 直接在其上面绘制图形,Qt 一共提供了四个这样继承 QPaintDevice 的绘图设备类,分别是:QPixmap、QBitmap、QImage和 QPicture。QPixmapQBitmapQImageQPicture下面我们将分两部分介绍这四种绘图设备。

m0_73482095的博客 1102

QImage QPixmap Mat区别

cvMat可以通过自定义函数转换为QImage Qimage通过fromImage函数 可以转换为QPixmap 绘图设备是指继承QPainterDevice的子类。Qt一共提供了四个这样的类,分别是QPixmap、QBitmap、QImage和 QPicture。其中,QPixmap专门为图像在屏幕上的显示做了优化,而QBitmap是QPixmap的一个子类,它的色深限定为1,你可以使用 Q...

weixin_38383877的博客 1110

QPixmap,QBitmap,QImage,QPicture

QPixmap专门为图像在屏幕上的显示做了优化; QBitmap是QPixmap 的一个子类,它的色深限定为 1,你可以使用QPixmap的 isQBitmap()函数来确定这个QPixmap是不是一个 QBitmap。QImage 专门为图像的像素级访问做了优化。 QPicture则可以记录和重现QPainter的各条命令。下面我们将分两部分介绍这四种绘图设备。QPixmap继承了 QPaintD

liuyanfeier的专栏 1248

图片绘图类QPixmap、QImage、QPicture

QPixmap也可以接受一个字符串作为一个文件的路径来显示这个文件,比如你想在程序之中打开png、jpeg之类的文件,就可以使用 QPixmap。注意,这里说的显示设备并不是硬件,而是操作系统提供的原生的绘图引擎。2.QBitmap是QPixmap的一个子类,它的色深限定为1,可以使用 QPixmap的isQBitmap()函数来确定这个QPixmap是不是一个QBitmap。则是使用独立于硬件的绘制系统,实际上是自己绘制自己,因此提供了像素级别的操作,并且能够在不同系统之上提供一个一致的显示形式。

qq_43470534的博客 510
上一篇: Qt之Gradient渐变填充
下一篇: Qt Graphics View Framework
zmcomputer
博客等级 码龄17年 59粉丝 11原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值