Qt: Снимок экрана с окном EGLFS - идеальный результат с точностью до пикселя?

Мы используем EGLFS для запуска приложения QML на встроенном устройстве Linux без X-сервера. Поэтому я не могу использовать обычные методы для получения скриншота (например, с помощью утилиты для скриншотов). В этом вопросе я нашел технику использования QQuickView::grabWindow(),

Мой вопрос: гарантированно ли результат этой функции будет идеальным по пикселям, идентичным тому, что видит пользователь на экране? Я беспокоюсь, что для захвата содержимого окна, Qt, возможно, придется перерисовать окно, используя другой путь кода (например, отрисовка к текстуре), что может привести к отличиям результатов.

Я бы хотел, чтобы в ваши ответы также была включена надежная ссылка.

1 ответ

Насколько я могу судить, скриншот не будет идентичным. Следуйте коду из QQuickWindow:: grabWindow: в итоге он вызывает qt_gl_read_framebuffer, который всегда будет считывать изображение как RGB(A)8. Фактический кадровый буфер может быть другим (например, это может быть RGB565).

(Я также, кажется, помню, что нельзя использовать чтение RGBA через glReadPixelsиз кадрового буфера RGB565, но я не уверен на 100%, что это так во всех версиях / вариантах OpenGL...)

В зависимости от ваших драйверов, обходной путь может быть чтение/dev/fb0содержание. В любом случае, пожалуйста, отправьте отчет об ошибке, если вам нужна эта функциональность.

Другие вопросы по тегам