【发布时间】:2016-04-25 03:41:44
【问题描述】:
对于我的应用程序,我想连续显示图像。但我发现将 qimage 转换为 qpixmap 花了我大约 30 毫秒。这影响了我的帧速率,所以我想找到更有效的方式来使用 QtGui 显示我的图像。我可以使用哪种方法? 有人可以帮我吗?
【问题讨论】:
对于我的应用程序,我想连续显示图像。但我发现将 qimage 转换为 qpixmap 花了我大约 30 毫秒。这影响了我的帧速率,所以我想找到更有效的方式来使用 QtGui 显示我的图像。我可以使用哪种方法? 有人可以帮我吗?
【问题讨论】:
如果你仔细阅读文档,一切都会得到解释。
如果您只加载图像并显示它(不对图像进行任何操作),只需加载图像并将其缓存为 QPixmap。
但是,如果您进行操纵,您将无能为力。也许您可以尝试将图像直接绘制到小部件的 QPainter。我不知道它是否比将图像转换为像素图并将其绘制到小部件更快。
【讨论】:
您不必进行转换。确保图像采用backing store 的格式,并且在小部件上只需drawImage。它尽可能快。
使用默认的光栅后端,QPixmap 是QImage 周围的一个非常薄的包装器。只要图像的格式正确,转换就不会发生。
要获取与QPixmap兼容的格式,可以使用以下代码:
QImage::Format pixmapFormat() {
static auto format = QPixmap{1,1}.toImage().format();
return format;
}
【讨论】:
我之前遇到过类似的问题,我发现的最佳解决方案是使用 OpenGL (QOpenGLWidget + glDrawPixels()) 而不是将 QImage 转换为 QPixmap。
【讨论】: