屏幕截图/屏幕抓取程序如何在运行 X 的 POSIX 系统上工作?

屏幕截图/屏幕抓取程序如何在运行 X 的 POSIX 系统上工作?
  1. 怎么办截屏程序如gnome 屏幕截图或者xfce4-屏幕截图程序获取他们的数据?
  2. 他们如何访问监视器/屏幕的二维像素矩阵流?
  3. 是否可以在多显示器设置上仅传输特定显示器的数据?我想将数据通过管道传输到我正在尝试编写的程序中,该程序将是用于多计算机/监视器设置的 FOSS 程序/脚本。

答案1

对于问题1和2,我将采取荒野猜测他们正在通过以下方式访问根窗口的可绘制对象根窗口 (3),然后使用X获取图像 (3)将根窗口的像素数据复制到某处以进一步处理它(例如将其转储为 PNG)。

这些手册页可能会有所帮助: XOpenDisplay (3), 默认屏幕 (3), 根窗口 (3), X获取图像 (3)

也可以看看这个问题在 StackOverflow 上。

至于问题3,如果使用Xinerama,将会出现多个屏幕,并且应用程序可以获得有关每个屏幕的位置和大小的信息,这对于选择要复制的区域同样有用XGetImage(...)

当然,这一切都假设您使用的是 Xlib。我听说有一个更好的选择XCB,但我个人到目前为止从未使用过它。

相关内容