繁体   English   中英

如何使用显示器的 output 作为程序的输入?

[英]How can I use the output of my monitor as the input to a program?

一些背景:我希望制作一个可以基于视觉输入玩视频游戏的程序。 虽然我可以在屏幕上显示游戏时将网络摄像头指向我的显示器,但我更愿意通过某种方式将屏幕上的任何像素信息发送到我的程序。

具体来说,我希望以大约 30fps 的速率对屏幕截图进行采样并对其进行计算。 到目前为止,我唯一能想到的就是在我的程序“按下”某个键时使用 Fraps 截屏,但这些只能以每秒一个的最大速率截取,并且需要使用这个外部程序。 我希望有一些方法可以更直接地截取这个屏幕信息。

我目前正计划使用 Java 和 Matlab 的组合,但我很乐意切换到具有快速抓取屏幕截图的好方法的任何语言。 哦,我在 Windows 7 上执行此操作,以防此屏幕抓取操作的级别足够低。

如果它是 2D Java 游戏,您只需将其发送到帧缓冲区以及您的视觉输入程序。 If it's 3D and in Java, you could possibly do a similar thing with screenshotting functions in the library the game is written in. If it's a game in another window, you could try using java.awt.Robot ( http://download. oracle.com/javase/1,5.0/docs/api/java/awt/Robot.html )并查看屏幕截图功能是否有效。 你会得到一个BufferedImage ,你将把它发送到视觉输入程序(就像你从 Java 2D 或 3D 应用程序发送游戏视图一样)。

我会尽力回答你的问题。 基本答案是屏幕数据本身是 memory 映射的,因此它位于物理 memory 的某个位置。 但是,您的操作系统可能已阻止您直接通过其虚拟 memory 系统访问该 memory。 因此,获得访问权限的唯一方法是:

a) 编写设备驱动程序来访问它或 b) 使用别人编写的设备驱动程序来访问它

在 Windows 上,您可以使用 DirectX 访问屏幕数据。 该网站解释了如何做到这一点:

http://www.dgrigoriadis.net/post/2008/01/29/Taking-screenshots-with-DirectX-90.aspx

你可以做到,但需要复杂的图像处理、手势识别和机器学习算法。 如果你想赢得那场比赛,系统的响应应该是实时的,这自然会使你的研究变得复杂。

但是如果原版游戏是自己开发的,那么你可能不需要任何图像处理,网络摄像头和FRAPS。 在这种情况下,您只需要机器学习来玩游戏。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM