如何改善QPainter的性能?

时间:2011-06-28 19:38:09

标签: qt graphics qpainter

我有一个大显示屏(大约1000x2000像素),我正在做以下操作来将图像绘制到屏幕上:

QImage *pImage = GetImage(); // from wherever
QPainter painter(this);   
painter.drawImage((0,0), *pImage);  // this line takes over 100ms to complete.

我正在绘制的屏幕越大,这种涂料的使用时间越长。我猜pImage是memcpy'd,这就是差异。如何减少这种开销?我不是想在这里扩展或任何东西。

感谢。

2 个答案:

答案 0 :(得分:2)

你正在画一幅QImage。不要这样做,请尝试使用QPixmap。

来自QImage documentation

  

QImage针对I / O以及直接像素访问和操作进行了设计和优化,而QPixmap则专为在屏幕上显示图像而设计和优化。“

根据平台的不同,将QImage数据放入绘画所需的格式和位置可能会非常昂贵。

P.S。:无需在堆上创建QImages,如

  

QImage对象可以按值传递,因为QImage类使用隐式数据共享。

答案 1 :(得分:0)

您可以做的一个简单改进是仅绘制需要更新的区域(如果可以)。 QPaintEvent包含更改区域的矩形,QPainter::drawImage具有可以对要绘制的部分进行重定位的重载。

您还可以查看ImageConversionFlags选项以获得更快的选项。

相关问题