![](/img/trans.png)
[英]How do I use one Java program, to monitor another Java program's 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.