【问题标题】:QImage to QPixmap is expensiveQImage 到 QPixmap 很昂贵
【发布时间】:2016-04-25 03:41:44
【问题描述】:

对于我的应用程序,我想连续显示图像。但我发现将 qimage 转换为 qpixmap 花了我大约 30 毫秒。这影响了我的帧速率,所以我想找到更有效的方式来使用 QtGui 显示我的图像。我可以使用哪种方法? 有人可以帮我吗?

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    如果你仔细阅读文档,一切都会得到解释。

    • QImage 专为 IO 处理以及直接像素访问和操作而设计
    • QPixmap 专为在屏幕上显示图像而设计和优化

    如果您只加载图像并显示它(不对图像进行任何操作),只需加载图像并将其缓存为 QPixmap。

    但是,如果您进行操纵,您将无能为力。也许您可以尝试将图像直接绘制到小部件的 QPainter。我不知道它是否比将图像转换为像素图并将其绘制到小部件更快。

    【讨论】:

    • 感谢您的建议。感觉好像用painter画图比较慢,不过我会试试的
    • 是的,使用painter绘制QImage实际上比将其转换为QPixmap并绘制pixmap(使用Qt 5.4测试)要慢。
    【解决方案2】:

    您不必进行转换。确保图像采用backing store 的格式,并且在小部件上只需drawImage。它尽可能快。

    使用默认的光栅后端,QPixmap 是QImage 周围的一个非常薄的包装器。只要图像的格式正确,转换就不会发生。

    要获取与QPixmap兼容的格式,可以使用以下代码:

    QImage::Format pixmapFormat() {
        static auto format = QPixmap{1,1}.toImage().format();
        return format;
    }
    

    【讨论】:

      【解决方案3】:

      我之前遇到过类似的问题,我发现的最佳解决方案是使用 OpenGL (QOpenGLWidget + glDrawPixels()) 而不是将 QImage 转换为 QPixmap。

      【讨论】:

      • 谢谢。我会试试这个方法
      猜你喜欢
      • 2018-03-27
      • 1970-01-01
      • 2011-06-18
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 2011-10-28
      • 1970-01-01
      • 2011-12-06
      相关资源
      最近更新 更多