8

我正在开发基于 Linux 的嵌入式系统。它使用 Qt 进行窗口化,并且没有 Xserver。我的目标是截取屏幕截图。

我尝试过使用 FBgrab。它失败了,因为我没有,/dev/fb0因为内核中没有启用帧缓冲区。我们正在运行一个基于 Qt 的应用程序来在屏幕上显示 UI (HDMI)。我还尝试了使用 QPixmap 和抓取窗口的 QT 网站中的屏幕截图应用程序。这也是一个失败,因为我无法在系统中运行两个 QAppliction,因为它会影响显示。

有没有其他方法可以获取屏幕截图?

4

2 回答 2

1

您可以让您的应用程序根据某些事件或命令对自身进行屏幕截图。为此,您可以将小部件抓取到像素图,然后将此像素图保存在某处。例如:

QWidget *widget = QApplication::activeWindow();
QPixmap pixmap = QPixmap::grabWidget(widget);
pixmap.save(QString("/path/to/screenshot/screenshot.png"));
于 2014-02-09T18:12:33.813 回答
0

假设您的视频软件堆栈不是完全定制的,您的 Linux 视频驱动程序应该是 FBDEV 驱动程序或 DRI 驱动程序。要检查这一点,我会告诉您在 live 框中搜索 /dev/fb0 文件或 /dev/dri/ 文件夹,但在嵌入式设备中,它们可以轻松重命名为任何内容,因此唯一知道的方法是检查视频设备驱动程序源(如果它们是 FBDEV,您将在 drivers/video/ 中找到它们,如果它们是 DRI,则在 /drivers/gpu/drm 中找到它们)。

如果它们是 FBDEV,那么 /dev/fb0 应该在那里可能有不同的名称。如果它们是 DRI,您仍然可以在构建 Linux 内核时启用 DRM_FBDEV_EMULATION 选项,并拥有一个可以依赖 FBgrab 的 FBDEV 设备节点。

于 2016-04-07T12:15:05.787 回答