您的位置:首页 > 其它

QPixmap,QBitmap,QImage,QPicture

2016-10-06 13:15 197 查看
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内置了隐式数据共享,所以只要知道传递 QPixmap。 Pixmap就是用来加速显示的,具体实现是依赖于系统的。

前面说过,QBitmap 继承自QPixmap,因此具有 QPixmap的所有特性。不同之处在于, QBitmap的色深始终为 1。色深这个概念来自计算机图形学,是指用于表现颜色的二进制的位数。我们知道,计算机里面的数据都是使用二进制表示的。为了表示一种颜色,我们也会使用二进制。比如我们要表示 8 种颜色,需要用 3 个二进制位,这时我们就说色深是 3。因此,所谓色深为 1,也就是使用 1 个二进制位表示颜色。1 个位只有两种状态: 0 和 1 ,因此它所表示的颜色就有两种,黑和白。所以说, QBitmap实际上是只有黑白两色的图像数据。由于 QBitmap色深小,因此只占用很少的存储空间,所以适合做光标文件和笔刷。

QPixmap使用底层平台的绘制系统进行绘制,无法提供像素级别的操作,而 QImage则是使用独立于硬件的绘制系统,实际上是自己绘制自己,因此提供了像素级别的操作,并且能够在不同系统之上提供一个一致的显示形式。

QImage与 QPixmap相比,最大的优势在于能够进行像素级别的操作。

最后一种QPicture 是平台无关的,因此它可以使用在多种设备之上,比如 svg、 pdf、ps 、打印机或者屏幕。

QPixmap依赖于硬件, QImage不依赖于硬件。

QPixmap主要是用于绘图,针对屏幕显示而最佳化设计, QImage主要是为图像I/O、图片访问和像素修改而设计的。

当图片小的情况下,直接用 QPixmap进行加载,画图时无所谓,当图片大的时候如果直接用 QPixmap进行加载,会占很大的内存,一般一张几十 K的图片,用QPixmap加载进来会放大很多倍,所以一般图片大的情况下,用 QImage进行加载,然后转乘QPixmap用户绘制。 QPixmap绘制效果是最好的。

QPimap主要用于加速显示, QImag主要是图像处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: