Я работаю над встроенной системой на основе Linux. Он использует Qt для управления окнами и Xserver отсутствует. Моя цель — сделать снимок экрана.
Я пытался использовать FBgrab. Это не удалось, так как у меня нет /dev/fb0
поскольку буфер кадров не включен в ядре. Мы запускаем приложение на основе Qt для отображения пользовательского интерфейса на экране (HDMI). Я также попробовал приложение снимков экрана на веб-сайте QT, которое использует QPixmap и окно захвата. Это также сбой, так как я не могу запустить два QAppliction в системе, так как это влияет на отображение.
Есть ли другой способ сделать снимок экрана?
Вы можете заставить свое приложение сделать снимок экрана на основе какого-либо события или команды. Вы делаете это, захватывая виджет в растровое изображение, а затем сохраняете это растровое изображение где-нибудь. Например:
QWidget *widget = QApplication::activeWindow();
QPixmap pixmap = QPixmap::grabWidget(widget);
pixmap.save(QString("/path/to/screenshot/screenshot.png"));
Предполагая, что ваш стек видеопрограмм не полностью настроен, ваш видеодрайвер Linux должен быть либо FBDEV, либо DRI. Чтобы проверить это, я бы посоветовал вам искать файл / dev / fb0 или папку / dev / dri / в вашем живом ящике, но во встроенном устройстве их можно легко переименовать во что угодно, поэтому единственный способ узнать это проверьте источники драйверов видеоустройств (вы найдете их в drivers / video /, если они FBDEV, или в / drivers / gpu / drm, если они DRI).
Если они FBDEV, то / dev / fb0 должно быть там с другим именем. Если они DRI, вы все равно можете включить опцию DRM_FBDEV_EMULATION при сборке ядра Linux и иметь узел устройства FBDEV, на который можно положиться с помощью FBgrab.