,,Qt中QPixmap、QImage、QPicture、QBitmap四者区别详解

,,Qt中QPixmap、QImage、QPicture、QBitmap四者区别详解

Qt提供了四个类来处理图像数据:QImage、QPixmap、QBitmap和QPicture。本文将详细介绍它们之间的区别。通过示例代码非常详细,有一定的参考价值。感兴趣的朋友可以参考一下。

目录

前言QPixmapQImageQBitmapQPicture参考:

前言

Qt提供了四个类来处理图像数据:QImage、QPixmap、QBitmap和QPicture。QImage是为I/O和直接像素访问和操作而设计和优化的,而QPixmap是为在屏幕上显示图像而设计和优化的。QBitmap只是继承了QPixmap的一个方便类,保证深度为1。如果QPixmap对象是位图,isQBitmap()函数返回true,否则返回false。最后,QPicture类是一个绘图设备,用于记录和重放QPainter命令。

QPixmap QImage

1.QPixmap主要用于绘图,并针对屏幕显示进行了优化。QImage主要是为图像I/O、图像访问和像素修改而设计的。

2.QPixmap依赖于所在平台的绘图引擎,所以抗锯齿等一些效果在不同的平台上可能会有不同的显示效果。QImage用的是Qt自带的画图引擎,在不同平台上可以有一样的显示效果。

3.目前Qt会将所有的QPixmap存储在图形内存中,QImage存储在客户端,独立于硬件。在X11、Mac和Symbian平台上,QPixmap存储在服务器端,而QImage存储在客户端。在Windows平台上,QPixmap和QImage存储在客户端,不使用任何GDI资源。

4.由于QImage独立于硬件,是一种QPaintDevice,我们可以在另一个线程中绘制它,而不用在GUI线程中处理它。使用这种方法可以大大提高UI的响应速度。

5.QImage类用于加载图像文件,有选择地操作图像数据,然后将QImage对象转换成QPixmap以在屏幕上显示。或者,如果不需要任何操作,可以直接将图像文件加载到QPixmap中。

6.QPixmap使用底层平台的绘图系统进行绘制,不能提供像素级的操作,而QImage使用的是独立于硬件的绘图系统,实际上是自己绘制,所以提供了像素级的操作,可以在不同的系统上提供一致的显示形式。

可以把QImage想象成一个RGB颜色的二维数组,记录每个像素的颜色。

QBitmap

QBitmap继承自QPixmap,因此它具有QPixmap的所有特性。QBitmap的颜色深度始终为1。色深的概念来自计算机图形学,指的是用来表示颜色的二进制数字的个数。众所周知,计算机中的所有数据都是用二进制表示的。为了表示一种颜色,我们也将使用二进制。例如,如果我们想表示八种颜色,我们需要使用三个二进制数字。这时候我们说色深是3。所以所谓色深是1,就是用一个二进制数字来表示颜色。一个比特只有0和1两种状态,所以代表两种颜色,黑和白。因此,QBitmap实际上只是黑白图像数据。

由于QBitmap色深小,只占用很少的存储空间,所以适合制作光标文件和画笔。

QPicture

QPicture是一个画图设备,用来记录和回放Qpainter的画图指令。

这是一个绘图设备,可以记录和再现QPainter命令。QPicture将QPainter的命令序列化到一个IO设备中,并保存为一种平台无关的文件格式。这种格式有时被称为“元文件”。Qt的这种格式是二进制的,不同于一些本地元文件。Qt的图片文件内容不限。只要是QPainter能画出来的,任何元素,无论是字体还是pixmap,或者是变换,都可以保存成一张图片。

QPicture是平台无关的,所以可以在各种设备上使用,比如svg、pdf、ps、打印机或者屏幕。回想一下,我们这里所说的QPaintDevice,实际上是指可以有QPainter绘制的对象。QPicture使用系统的分辨率,QPainter可以调节,消除不同设备之间的显示差异。

用begin()方法在QPicture上画图,用end()结束画图,用save()保存到文件。

QPicture图片;

QPainter画师;

painter.begin(图片);//在图片中绘画

painter.drawEllipse(10,20,80,70);//绘制一个椭圆

painter . end();//绘画完成

picture . save(' drawing . pic ');//保存图片

要重放绘图指令,创建一个新的QPicture对象,用load()重新加载保存的文件,然后在指定的绘图设备上绘制q picture q device:

QPicture图片;

picture . load(' drawing . pic ');//加载图片

QPainter画师;

painter . begin(my image);//在myImage中绘画

painter.drawPicture(0,0,图片);//在(0,0)处绘制图片

painter . end();//绘画完成

参考:

Qt帮助文档https://blog.csdn.net/zzwdkxx/article/details/39480559

关于QPixmap,QImage,QPicture,QBitmap在Qt中的区别,本文到此为止。关于QPixmap、QImage、QPicture和QBitmap的更多信息,请搜索我们之前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: