2016-11-07 27 views
2

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

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

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

+0

Вы спрашиваете, как быть уверенным, что «цвета в приложении» соответствуют тому, что пользователь видит на экране? Потому что в этом отношении имеется количество литературы * – peppe

+0

@peppe: Нет. Когда я называю «grabWindow», я хочу, чтобы данные в пикселях были идентичны пиксельным данным в окне, те же данные, которые предоставляется пользователю. То есть не отдельное визуализированное, «довольно близкое» представление того, что находится в окне. –

ответ

1

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

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

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