我不明白 QImage 和 QPixmap 之间有什么区别,它们似乎提供了相同的功能。什么时候应该使用 QImage,什么时候应该使用 QPixmap?
通过阅读 QImage 和 QPixmap 上的文档轻松回答:
QPixmap 类是一种可用作绘画设备的离屏图像表示。 QImage 类提供了一种独立于硬件的图像表示,允许直接访问像素数据,并且可以用作绘图设备。
编辑:另外,来自@Dave的回答:
您不能在 GUI 线程之外操作 QPixmap,但 QImage 没有这样的限制。
来自@Arnold:
这是一个通常(并非总是)适用的简短摘要:如果您打算操作图像、修改图像、更改图像上的像素等,请使用 QImage。如果您计划在屏幕上多次绘制同一图像,请将其转换为 QPixmap。
Qt Labs 有一系列很好的文章,解释了很多关于 Qt 图形系统的内容。 This article 特别有一个关于 QImage
与 QPixmap
的部分。
以下是通常(并非总是)适用的简短摘要:
如果您打算操作图像、修改图像、更改图像上的像素等,请使用 QImage。
如果您计划在屏幕上多次绘制同一图像,请将其转换为 QPixmap。
QImage
的“操作和修改”是否包括将其保存为图像文件?如果我从 QImage 对象开始,将其保存为图像文件时哪个更快?
一个重要的区别是您不能在除主 GUI 线程之外的任何东西上创建或操作 QPixmap
。但是,您可以在后台线程上创建和操作 QImage
实例,然后在将它们传递回 GUI 线程后对其进行转换。
QPixmap 是一个“图像对象”,其像素表示在您的代码中无关紧要,因此 QPixmap 是为在显示屏上渲染图像而设计和优化的,它在使用 X11 时存储在 XServer 上,因此在 XWindow 上绘制 QPixmap 比绘制 QImages,因为数据已经在服务器上,并且可以使用。何时使用 QPixmap:如果您只想反复绘制现有图像(图标 .. 背景 .. 等),请使用 QPixmap。
QImage 是客户端代码的“内存中的像素阵列”,QImage 针对 I/O 以及直接像素访问和操作而设计和优化。何时使用QImage:如果你想绘制,用Qpaint,或者操作一个图像的像素。
QBitmap 只是一个方便的 QPixmap 子类,确保深度为 1,它是一个单色(1 位深度)像素图。就像 QPixmap 一样,QBitmap 针对隐式数据共享的使用进行了优化。
QPicture 是一个绘图设备,可以记录和回放 QPainter 命令——你的绘图——
在工业环境中很重要:
QPixmap 存储在进行显示的视频卡上。不是 QImage。
因此,如果您有一个运行应用程序的服务器,以及一个执行显示的客户端站,那么就网络使用而言,这是非常重要的。
使用 Pixmap,重绘包括通过网络仅发送重绘命令(几个字节)。
使用 QImage,它包括发送整个图像(大约几 MB)。
不定期副业成功案例分享