一些背景:我希望制作一个可以基于视觉输入玩视频游戏的程序。虽然我可以在游戏显示在屏幕上时将网络摄像头对准显示器,但我更愿意通过某种方式将屏幕上的任何像素信息发送到我的程序。
具体来说,我希望以 ~30fps 的速率对屏幕截图进行采样并对其进行计算。到目前为止,我唯一能想到的是,每当我的程序“按下”某个键时,使用 Fraps 来截取屏幕截图,但这些屏幕截图的最大速率只能为每秒一张,并且需要使用此外部程序。我希望有某种方法可以更直接地拦截此屏幕信息。
我目前计划使用 Java 和 Matlab 的组合,但我很乐意切换到任何一种能够快速抓取屏幕截图的语言。哦,我正在 Windows 7 上执行此操作,以防此屏幕抓取操作的级别足够低,因此很重要。
最佳答案
我会尽力回答你的问题。基本答案是屏幕数据本身是内存映射的,因此它驻留在物理内存中的某个位置。但是,您的操作系统可能阻止您通过其虚拟内存系统直接访问该内存。因此,获得访问权限的唯一方法是:
a) 编写设备驱动程序来访问它 或者 b) 使用别人编写的设备驱动程序来访问
在 Windows 上,您可以使用 DirectX 访问屏幕数据。该网站解释了如何做到这一点:
http://www.dgrigoriadis.net/post/2008/01/29/Taking-screenshots-with-DirectX-90.aspx
关于java - 如何使用显示器的输出作为程序的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6529939/