如何提高 QPainter 的性能?

发布于 2024-11-17 23:18:32 字数 329 浏览 1 评论 0原文

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

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

我绘制的屏幕越大,绘制所需的时间就越长。我猜 pImage 正在被 memcpy'd,这就是区别。我怎样才能减少这种开销?我并不是想扩大规模或做任何事情。

谢谢。

I have a large display (about 1000x2000 pixels) and I'm doing the following to draw images to the screen:

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

The larger the screen is that I'm drawing to, the longer this paint takes. I guess the pImage is being memcpy'd and that's the difference. How can I reduce this overhead? I'm not trying to scale or anything here.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦途 2024-11-24 23:18:32

您正在绘制 QImage。不要这样做,尝试使用 QPixmap 代替。

来自 QImage 文档

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

根据平台的不同,将 QImage 数据转换为绘画所需的格式和位置,可以 PS:不需要

在堆上创建 QImage,因为

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

You're painting a QImage. Don't do that, try with a QPixmap instead.

From the QImage documentation:

QImage is designed and optimized for I/O, and for direct pixel access and manipulation, while QPixmap is designed and optimized for showing images on screen."

Depending on the platform, getting the QImage data into the format and location needed for painting, can be extremely expensive.

P.S.: There is no need to create QImages on the heap, as

QImage objects can be passed around by value since the QImage class uses implicit data sharing.

命比纸薄 2024-11-24 23:18:32

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

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

One simple improvement you can make is to draw only the area that needs updated (if you can). The QPaintEvent contains a rect for the changed area, and the QPainter::drawImage has overloads that can take rects for the portion to draw.

You might also look at the ImageConversionFlags options for faster options.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文