【发布时间】:2011-06-28 19:38:09
【问题描述】:
我有一个大显示器(大约 1000x2000 像素),我正在执行以下操作以将图像绘制到屏幕上:
QImage *pImage = GetImage(); // from wherever
QPainter painter(this);
painter.drawImage((0,0), *pImage); // this line takes over 100ms to complete.
我要绘制的屏幕越大,绘制所需的时间就越长。我猜 pImage 正在被 memcpy 处理,这就是区别。我怎样才能减少这种开销?我不想在这里扩展或做任何事情。
谢谢。
【问题讨论】:
-
如下所述:我还应该注意我正在使用 QImage,因为我正在处理 QIMAGE::RGB16 格式的原始图像缓冲区。基于此,我不确定我是否可以只使用 QPixmap。您知道将 QPixmap 设置为该格式的原始图像缓冲区的方法吗?
-
您不能将原始像素“填充”到 QPixmap 中。 QImage 是正确的方法。而且,如果不会多次绘制相同的图像,那么转换为 QPixmap 也没有任何好处。这是在什么平台上的?我知道 Mac 上的“加速”默认画家后端真的很慢。尝试从 QImage 创建一个painter,然后查看相同的操作是否更快。
-
@Stephen Chu。我正在从 QImage 创建一个画家。还是你的意思是别的?我在 Ubuntu 10.10 上。
-
我以为是物理屏幕。在某些平台上,Qt 使用实际上比软件引擎慢的“加速”绘图引擎。我认为 QImage 支持的画家始终是软件引擎,无论平台如何。我建议使用软件引擎。既然它不适合你,不妨试试 QPixmap 支持的画家?