【问题标题】:What is the fastest way to display an image in QT on X11 without OpenGL?在没有 OpenGL 的 X11 上以 QT 显示图像的最快方法是什么?
【发布时间】:2011-11-16 15:42:37
【问题描述】:

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

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

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

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

【问题讨论】:

标签: linux qt qt4 x11 xlib


【解决方案1】:

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

【讨论】:

  • 是的,我已经切换到“光栅”QT 图形引擎,它在后台使用 MIT-SHM 并将我的 drawImage 转换为 XShmPutImage。它给了我显着的性能提升,但现在我想知道我是否可以做得更好
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2015-07-25
    • 2010-09-11
    • 2015-12-10
    • 1970-01-01
    • 2011-01-07
    • 2023-03-25
    • 2012-06-02
    • 2011-12-24
    • 2012-09-07
    相关资源
    最近更新 更多