Qt:截取EGLFS窗口的截图 - 像素完美相同的结果?

时间:2016-11-07 12:01:19

标签: qt opengl screenshot qtquick2 eglfs

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

我的问题:此功能的结果是否保证与用户在屏幕上看到的像素完美相同?我担心要抓取窗口内容,Qt可能需要使用不同的代码路径(例如渲染到纹理)重新渲染窗口,这可能导致结果不同。

我也希望你的答案中包含可靠的参考资料。

1 个答案:

答案 0 :(得分:2)

据我所知,屏幕截图不一样。按照QQuickWindow::grabWindow中的代码:它最终调用qt_gl_read_framebuffer,它总是将图像读出为RGB(A)8。您的实际帧缓冲可能不同(例如,它可能是RGB565)。

(我似乎也记得一个人不能通过{* 1}}从RGB565帧缓冲区中使用RGBA读取,但我并非100%确定在所有OpenGL版本/变体中都是如此...)

根据您的驱动程序,解决方法可能是阅读glReadPixels内容。无论如何,如果您需要此功能,请提交bug report