没有OpenGL在X11上在QT上显示图像的最快方法是什么?

时间:2011-09-14 02:09:35

标签: linux qt qt4 x11 xlib

我需要在QT小部件中显示原始图像。我在帧缓冲区上运行X11,因此OpenGL不可用。

图像和帧缓冲区的格式相同 - RGB565,但如果需要,我可以将其更改为任何其他格式。我不需要混合或缩放。我只需按原样显示像素。

我正在使用QPainter :: drawImage,但它将QImage转换为QPixmap,这种转换似乎非常慢。它也得到了Xrender的支持,我认为在Xrender中支持混合需要不必要的开销,我并不需要

还有更好的方法吗?如果它在QT中不可用,我可以使用Xlib或任何其他库或协议。我可以修改驱动程序,X服务器或其他任何东西。

2 个答案:

答案 0 :(得分:3)

您是否尝试使用XPutImage? (或XShmPutImage如果您要从客户端传输图像超过一次并且可以使用MIT-SHM扩展名)另请查看video4linux webcam sample viewer.c,但在发送之前它们会将565转换为16或24位深度。对于您的设置,应该可以发送图像而无需转换

答案 1 :(得分:3)

可能值得设置QT_GRAPHICSSYSTEM环境变量。我遇到了X11渲染器变得非常非常慢的问题。在设置QT_GRAPHICSSYSTEM = 'raster'时,QT渲染会绕过X11渲染引擎,这可以(根据我的经验)显着提高效率。 QT_GRAPHICSSYSTEM的其他有效值为'native''opengl',但'raster'对我有效。我很想知道你是怎么过的。