java - 如何使用显示器的输出作为程序的输入?

标签 java windows video-capture video-processing

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

具体来说,我希望以 ~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/

相关文章:

.net - 系统错误 5 启动 .NET 服务时访问被拒绝

android - MediaRecorder 不再适用于新的 Google Glass 固件 (XE19.1) 媒体服务器死机错误 100

android - 三星 Galaxy S5 无法以低分辨率/帧率录制视频

swift - 使用Swift录制和播放视频并将视频发送到服务器

java - Java中从int到string的二维数组或矩阵

java - 使用dblink和Java调用存储过程

windows - Win32_Product 的替代品?

java - Android 文件读写

java - 跟踪并打印 while 循环的使用次数

windows - Docker 组合容器失败并退出,代码 127 丢失/bin/env bash