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

标签 c++ qt audio scroll qimage

我有以下用户界面,其中显示声波图(频率+时间声音表示)。所以图像不是从某个地方加载的,它是由 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/

相关文章:

c#用一行c#代码播放声音

c++ - 函数可以访问传递给 main() 的参数吗?

c++ - 在 istreambuf_iterator 中使用 C++20 范围

visual-studio - Qt Creator 中应该如何管理多个项目?

ios - 使用 Swift 分析录制的音频文件以进行语音转文本

objective-c - 使用后退按钮 Storyboard 播放声音。 objective-c

c++ - Ide 发布错误,但程序运行

c++ - 有趣又烦人的整数问题

c++ - QDateTime::fromString 不接受我的 QString?

Qt mapToGlobal 和多个屏幕。他们如何互动?