我们使用EGLFS在没有X服务器的嵌入式linux设备上运行QML应用程序。因此,我不能使用通常的技术来获得截图(例如,使用截图实用程序)。在这个问题上我发现了使用QQuickView::grabWindow()的技术。
我的问题是:是这个功能的结果,它保证像素与用户在屏幕上看到的内容完全相同?我担心要抓取窗口内容,Qt可能必须使用不同的代码路径(例如呈现到纹理)重新修改窗口,这可能会导致结果不同。
我也希望在你的答案中包含一个可靠的参考资料。
发布于 2016-11-07 17:30:41
据我所知,截图是不一样的。按照QQuickWindow::grabWindow的代码:它最终调用qt_gl_read_framebuffer,它总是将图像读入RGB(A)8。您的实际框架缓冲区可能不同(例如,它可能是RGB565)。
(我似乎还记得,不能使用通过glReadPixels从RGB565框架缓冲区读取RGBA,但我不能100%肯定所有OpenGL版本/变体都是如此.)
根据驱动程序的不同,解决方案可能是读取/dev/fb0内容。无论如何,如果您需要这个功能,请提交一个错误报告。
https://stackoverflow.com/questions/40464715
复制相似问题