2016-04-25 178 views
0

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

回答

2

如果你很好的阅读了文档,一切都会被解释。

  • QImage的是设计为IO处理,以及用于直接像素访问和操纵
  • 的QPixmap被设计和用于在屏幕上显示

如果只负载图像,并显示它的图像优化(没有任何操纵你的图像),只需加载你的图像,并将其缓存为QPixmap。

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

+0

谢谢您的建议。我似乎有一个印象,画家用图像绘制图像比较慢,但我会试试 – betterorbest

+0

是的,用画家绘制QImage实际上比将其转换为QPixmap并绘制像素图(用Qt 5.4测试)要慢。 – Tomas

0

我以前面临着类似的问题,我已经发现最好的解决方案是使用的而不是转换到QImage一个QPixmap的OpenGL QOpenGLWidget + glDrawPixels())。

+0

谢谢。我会尝试这种方法 – betterorbest

0

您不必进行转换。确保该图像的格式为backing store,并且该widget上只有drawImage。它尽可能快。

使用默认栅格后端,QPixmap是围绕QImage的非常薄的包装。只要图像格式正确,转换就无效。

为了得到QPixmap兼容的格式,你可以使用下面的代码:

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