2

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

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

我要绘制的屏幕越大,绘制所需的时间就越长。我猜 pImage 正在被 memcpy 处理,这就是区别。我怎样才能减少这种开销?我不想在这里扩展或任何东西。

谢谢。

4

2 回答 2

4

你正在画一个 QImage。不要那样做,尝试使用 QPixmap 代替。

QImage 文档

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

根据平台,将 QImage 数据转换为绘画所需的格式和位置可能非常昂贵。

PS:不需要在堆上创建QImages,因为

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

于 2011-06-28T20:39:35.897 回答
0

您可以进行的一项简单改进是仅绘制需要更新的区域(如果可以的话)。QPaintEvent包含更改区域的矩形,并且具有QPainter::drawImage可以为要绘制的部分获取矩形的重载。

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

于 2011-06-29T14:44:39.210 回答