2

我们使用 EGLFS 在没有 X 服务器的嵌入式 Linux 设备上运行 QML 应用程序。所以我不能使用通常的技术来获取屏幕截图(例如使用屏幕截图实用程序)。在这个问题中,我找到了使用QQuickView::grabWindow().

我的问题:这个函数的结果是否保证与用户在屏幕上看到的完全一致?我担心要获取窗口内容,Qt 可能必须使用不同的代码路径(例如渲染到纹理)重新渲染窗口,这可能会导致结果不同。

我也希望您的答案中包含可靠的参考。

4

1 回答 1

2

据我所知,屏幕截图不会完全相同。遵循QQuickWindow::grabWindow中的代码:它最终调用qt_gl_read_framebuffer,它总是将图像读取为 RGB(A)8。您的实际帧缓冲区可能不同(例如,它可能是 RGB565)。

(我似乎还记得不能通过glReadPixelsRGB565 帧缓冲区使用 RGBA 读取,但我不是 100% 确定在所有 OpenGL 版本/变体中都是如此......)

根据您的驱动程序,解决方法可能是读取/dev/fb0内容。无论如何,如果您需要此功能,请提交错误报告。

于 2016-11-07T17:30:41.393 回答