QImage和QPixmap有什么区别?


83

我不明白QImage和QPixmap有什么区别,它们似乎提供了相同的功能。什么时候应该使用QImage?什么时候应该使用QPixmap?


我不确定我是否理解您的问题,但是我认为在文档中已经很清楚了:“ QImage是针对I / O进行设计和优化的,用于直接像素访问和操作,而QPixmap是针对显示图像的设计和优化的。在屏幕上。” doc.qt.nokia.com/latest/qpixmap.html#details
cgmb

1
是的 我发现了,但不是很了解,例如,针对I / O优化并针对展示进行了优化,这是在不同平台上显示的picutre的区别吗?..您能帮助我迈出一步来解释一下吗..谢谢..
Tu。Tu先生2012年

我仍然不是100%知道我的意思,但是如果您正在使用QWidgets,则可以在QLabel中显示它。如果您使用的是QGraphicsView,则可以在QGraphicsPixmapItem中显示它。如果您使用的是QML,则Image元素将为您处理所有事情。
cgmb

让我换一种说法,什么是引擎,它的工作是什么?什么时候使用?
涂先生

Answers:


54

Easilly通过阅读QImageQPixmap上的文档来回答:

的QPixmap类是一个离屏,可用于作为涂料设备图像表示。

的QImage类提供独立于硬件的图像表示,其允许像素数据的直接访问,并且可以被用作涂料设备。

编辑:另外,从@Dave的答案:

您不能在GUI线程之外操作QPixmap,但是QImage没有这样的限制。

从@Arnold:

以下是通常(并非总是)适用的简短摘要:

  • 如果您打算处理图像,对其进行修改,更改其像素等,请使用QImage。
  • 如果您打算在屏幕上多次绘制同一图像,请将其转换为QPixmap。

感谢您的帮助... QPixmpa和QImage加载图片的一般过程是什么。.内存中的内容是什么..谢谢..
Tu。Tu先生2012年

我不确定您要做什么,但是在这个问题中,我演示了如何从磁盘加载YV12数据,如何使用GLSL片段着色器转换为RGB,然后将其显示在QImage的屏幕上。我想,如果您更清楚自己要完成的工作,我可以为您指明正确的方向。
karlphillip 2012年

14
这真的回答什么吗?
spinkus 2014年

7
仅复制文档和其他人的答案是没有意义的。
Viacheslav Kroilov

48

Qt Labs上有一系列不错的文章,它们解释了有关Qt图形系统的很多内容。本文特别介绍了QImagevs。QPixmap

以下是通常(并非总是)适用的简短摘要:

  • 如果您打算处理图像,对其进行修改,更改其像素等,请使用 QImage
  • 如果您打算在屏幕上多次绘制同一图像,请将其转换为QPixmap

谢谢。这段文字告诉我们:加载图片有两种不同的方式,光栅和OpenGL?是正确的?
涂先生

我不太明白这个问题。“光栅”和“ OpenGL”都没有专门表示加载图片的方式。
阿诺德·斯彭斯

37

一个重要的区别是,QPixmap除了主GUI线程外,您无法在其他任何对象上创建或操作。但是,您可以QImage在后台线程上创建和操作实例,然后在将实例传递回GUI线程后对其进行转换。


22

在工业环境中很重要:

QPixmap存储在进行显示的视频卡上。不是QImage。

因此,如果您有运行该应用程序的服务器,而有一个客户站进行显示,则对于网络使用而言,这是非常重要的。

对于Pixmap,重绘包括通过网络仅发送重绘命令(几个字节)。

对于QImage,它包含发送整个图像(大约几MB)。


19
  • QPixmap 是一个“图像对象”,其pixel表示形式与您的代码无关,因此QPixmap是在显示屏幕上呈现图像而设计和优化的,在使用X11时将其存储在XServer上,因此在XWindow上绘制QPixmap比在绘制时快得多。 QImages,因为数据已经在服务器上,可以使用了。

    何时使用QPixmap:如果您只是想反复绘制现有图像(图标..背景..等),请使用QPixmap。

  • QImage客户端代码的“内存中的像素数组” ,QImage是针对I / O以及直接像素访问和操纵而设计和优化的。

    何时使用QImage:如果要绘制,请使用Qpaint或操纵图像像素。

  • QBitmap只是一个方便的QPixmap子类,它确保深度为1,即单色(1位深度)像素图。就像QPixmap一样,QBitmap已针对使用隐式数据共享进行了优化。

  • QPicture是一种绘画设备,可以记录并重放QPainter命令-您的图形-
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.