在Linux上进行屏幕截图的最快方法
这个问题与此相似
最快的屏幕捕获方法
但对于Linux / X11。
更具体地说,我需要一种方法来捕捉在X11显示屏上运行的一个窗口的像素图像(窗口中alt-print屏幕的程序化等价物)。
注释和要求:
1)即使一个新的窗口被放置在被捕捉的窗口的顶部,像素图像仍然应该指向原始的应用程序窗口而没有任何遮挡
2)用户不需要看到应用程序窗口,我只需将像素缓冲区/图像存储为视频目的
我探索的其他选择是:
1)xvfb - 它可以工作,但是它确实能够渲染CPU,这对于一个好的GPU来说是缓慢而浪费的
2)x11在许多lxc内部 - 理论上可以工作,但是对于设置来说很复杂,我不确定它会在很多窗口被捕获时很好地扩展
建议和想法是受欢迎的
这可以在具有硬件加速的服务器中使用VirtualGL。 基本上只需配置服务器,然后在同一台机器上或同一网络中的一台机器上运行
export DISPLAY=<your xvfb display>
vglrun <your_app>
这将具有以下优点:
1)你的应用程序将使用virtualGL进行渲染,这将使用硬件
2)VirtualGL将在Xfvb显示内显示你的3D上下文,它只会渲染CPU中的2D小部件
3)配置Xvfb渲染到帧缓冲区
4)利润!
这对于纯X11是不可能的。
你可以得到你想要的合成,但只能在支持它的服务器上(大多数现代的服务器)。 这实际上与窗口管理员无关。 WM只是另一个客户,虽然有一些特殊的能力,但这些与合成无关。 您可以使用相同的合成API。
man xcomposite
应该让你开始。
您可以使用xwd(1)转储X11窗口(和xwud(1)以显示它)。 ImageMagick和Netpbm工具知道如何处理XWD格式。 但这些并不是特别快。 而且他们不会透露窗口的隐藏部分。
链接地址: http://www.djcxy.com/p/81005.html