我们正在使用EGLFS在没有X服务器的嵌入式Linux设备上运行QML应用程序。所以我不能使用通常的技术来获取屏幕截图(例如使用屏幕截图实用程序应用程序)。 In this question我找到了使用QQuickView::grabWindow()
的技巧。
我的问题:此功能的结果是否保证与用户在屏幕上看到的像素完美相同?我担心要抓取窗口内容,Qt可能需要使用不同的代码路径(例如渲染到纹理)重新渲染窗口,这可能导致结果不同。
我也希望你的答案中包含可靠的参考资料。
答案 0 :(得分:2)
据我所知,屏幕截图不一样。按照QQuickWindow::grabWindow中的代码:它最终调用qt_gl_read_framebuffer
,它总是将图像读出为RGB(A)8。您的实际帧缓冲可能不同(例如,它可能是RGB565)。
(我似乎也记得一个人不能通过{* 1}}从RGB565帧缓冲区中使用RGBA读取,但我并非100%确定在所有OpenGL版本/变体中都是如此...)
根据您的驱动程序,解决方法可能是阅读glReadPixels
内容。无论如何,如果您需要此功能,请提交bug report。