95

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

4

5 回答 5

61

通过阅读QImageQPixmap上的文档轻松回答:

QPixmap类是一种可用作绘画设备的离屏图像表示

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

编辑:另外,来自@Dave的回答:

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

来自@Arnold:

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

  • 如果您打算操作图像、修改图像、更改图像上的像素等,请使用 QImage。
  • 如果您计划在屏幕上多次绘制同一图像,请将其转换为 QPixmap。
于 2012-04-25T12:37:21.380 回答
52

Qt Labs 有一系列很好的文章,解释了很多关于 Qt 图形系统的内容。这篇文章特别有一个关于QImagevs.的部分QPixmap

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

  • 如果您计划对图像进行操作、修改、更改像素等操作,请使用QImage.
  • 如果您打算在屏幕上多次绘制同一图像,请将其转换为QPixmap.
于 2012-04-25T04:28:42.483 回答
38

一个重要的区别是您不能QPixmap在除主 GUI 线程之外的任何东西上创建或操作 a。但是,您可以QImage在后台线程上创建和操作实例,然后在将它们传递回 GUI 线程后对其进行转换。

于 2012-04-25T12:22:09.297 回答
23

在工业环境中很重要:

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

因此,如果您有一个运行应用程序的服务器,以及一个执行显示的客户端站,那么就网络使用而言,这是非常重要的。

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

使用 QImage,它包括发送整个图像(大约几 MB)。

于 2013-06-06T08:19:57.627 回答
21
  • QPixmap 是一个“图像对象”,其pixel表示在您的代码中无关紧要,因此 QPixmap 是为在显示屏上渲染图像而设计和优化的,它在使用 X11 时存储在 XServer 上,因此在 XWindow 上绘制 QPixmap比绘制快得多QImages,因为数据已经在服务器上,可以使用了。

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

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

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

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

  • QPicture是一个绘图设备,可以记录和回放 QPainter 命令——你的绘图——
于 2018-02-14T08:01:16.980 回答