gpt4 book ai didi

c++ - 如何有效地在窗口中滚动 1024x90000 图像?

转载 作者:可可西里 更新时间:2023-11-01 16:48:14 25 4
gpt4 key购买 nike

我有以下用户界面,其中显示声波图(频率+时间声音表示)。所以图像不是从某个地方加载的,它是由 QPainter 在读取 WAV 文件时绘制的。

The UI

我当前的实现是一个巨大的 QImage 对象,图像是在其中绘制的。在 paintEvent() 上,我在小部件上绘制了大型 QImage 的一部分:

QPainter painter(this);
// (int, int, QImage*, int, int)
painter.drawImage(0, 0, *m_sonogram, 0, m_offset);

但是,据我所知,QPixmap 针对在屏幕上显示像素图进行了优化,所以我应该将 QImage 转换为 QPixmap超声图绘制完成后?

此外,是否值得将大图像保留为某种较小尺寸的单独 QPixmap 对象的链表,并使 paintEvent() 更智能地在避免 Qt 的自动切割程序等的较小对象列表?

当我的 QImage 足够大时,每个 paintEvent() 都会消耗大量的 CPU

欢迎各种建议:)

最佳答案

是的,根据我有限的 Qt 应用程序开发经验,如果您有静态图像(或不经常更新的图像),(出于性能目的)从中创建 QPixmap 并保留它是非常值得的在您的 paintEvent 处理程序中通过 QPainter::drawPixmap 使用。

但是,我从未尝试过对大于 4Kx4K 的图像执行此操作,因此我无法确定它是否适用于您的巨大图像,或者当您开始对图形内存施加压力时会严重崩溃。在考虑添加复杂的平铺系统之前,我肯定会尝试一下。

关于c++ - 如何有效地在窗口中滚动 1024x90000 图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9446482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com