如何在Java程序中访问系统显示内存/帧缓冲区?
我想自己做一个 VNC
客户端,想知道在 Linux 系统上怎么直接访问显示内存?这样我就可以通过 Socket 发送数据或者把它存到本地文件里。
我查了一下,发现一种方法是以很高的帧率捕捉屏幕(也就是截图),然后把它转换成 RAW 格式,压缩后存到一个 ArrayList 里。
不过,我觉得这种方法有点占资源,所以我在找其他的替代方案。
如果有其他方法也请告诉我(只用 Java
或 Python
)?
1 个回答
0
直接访问Linux上的系统显示内存
你不能这样做。Linux是一个有内存保护的虚拟地址空间操作系统。哦,内核确实通过/dev
中的某个节点给你访问图形内存的权限,但这并不是通常实现这种功能的方法。
而且在Linux上,你通常会运行一个显示服务器,比如X11(或者将来基于Wayland协议的东西),可能根本就没有系统图形内存。
我研究了一下,发现实现这个的一个方法是以高帧率捕捉屏幕(截图),把它转换成RAW格式,然后压缩并存储在一个ArrayList中。
这正是实现的方法。使用显示系统提供的方法来捕捉屏幕。这是唯一可靠的方式。需要注意的是,如果转换或压缩是你的瓶颈,那么从图形内存中获取数据时也会遇到同样的问题。