我有一个大显示屏(大约1000x2000像素),我正在做以下操作来将图像绘制到屏幕上:
QImage *pImage = GetImage(); // from wherever
QPainter painter(this);
painter.drawImage((0,0), *pImage); // this line takes over 100ms to complete.
我正在绘制的屏幕越大,这种涂料的使用时间越长。我猜pImage是memcpy'd,这就是差异。如何减少这种开销?我不是想在这里扩展或任何东西。
感谢。
答案 0 :(得分:2)
你正在画一幅QImage。不要这样做,请尝试使用QPixmap。
QImage针对I / O以及直接像素访问和操作进行了设计和优化,而QPixmap则专为在屏幕上显示图像而设计和优化。“
根据平台的不同,将QImage数据放入绘画所需的格式和位置可能会非常昂贵。
P.S。:无需在堆上创建QImages,如
QImage对象可以按值传递,因为QImage类使用隐式数据共享。
答案 1 :(得分:0)
您可以做的一个简单改进是仅绘制需要更新的区域(如果可以)。 QPaintEvent
包含更改区域的矩形,QPainter::drawImage
具有可以对要绘制的部分进行重定位的重载。
您还可以查看ImageConversionFlags
选项以获得更快的选项。