2012-01-31 44 views
0

我正在構建一個Java應用程序來解決難題。我編碼的方式基本上,程序將拍攝一個屏幕截圖,在屏幕截圖中找到一個像素,然後通過機器人功能將鼠標移動到桌面上的該位置。我理解採取屏幕截圖背後的理論,將它存儲在一個數組中,探索數組,直到存儲具有正確顏色組合的像素彈出,並將鼠標移動到屏幕上的該位置,但是我不能爲我的生活得到代碼停止。如果有人知道,或者可以敲出一個需要屏幕截圖的示例代碼,將它存儲在一個數組中(或者存儲設備,我不知道數組是否最適合此特定用途)會發現該數組中的一個像素移動鼠標到像素位置,然後清除陣列,我會非常棒,因爲這讓我瘋狂!用java迴應顏色事件

到目前爲止,我有:

公共靜態無效的主要(字串[] args)拋出異常{

Robot robot = new Robot(); 

{ 
private static Rectangle rectangle = new Rectangle(0, 0, 1075, 700); 

{ 
    BufferedImage image = r.createScreenCapture(rectangle); 
    search: for(int x = 0; x < rectangle.getWidth(); x++) 
    { 
     for(int y = 0; y < rectangle.getHeight(); y++) 
     { 
      if(image.getRGB(x, y) == Color.getRGB(195, 174, 196)) 
      { 
       Robot.mouseMove(x, y); 
       break search; 
      } 
     } 
    } 
} 

}

我得到三個錯誤:

  1. 表達式的非法開始,該指標指向下面的代碼段中獲取

    private static Rectangle rectangle = new Rectangle(Toolkit.getDefaultToolkit()。getScreenSize());

  2. 表達的非法的開始,在低於

    私有靜態矩形矩形代碼段大小指向指示器=新的Rectangle(Toolkit.getDefaultToolkit()getScreenSize());

  3. ;預期的指標指向矩形矩形

    private static Rectangle rectangle = new Rectangle(Toolkit.getDefaultToolkit()。getScreenSize());

+2

*「敲一個示例代碼」* SO不是代碼工廠。爲什麼不通過發佈我們最佳嘗試的SSCCE(在此結束之前)顯示一些努力? – 2012-01-31 05:09:51

+0

['Zoom'](http://stackoverflow.com/a/3742841/230513)可能是構建[sscce](http://sscce.org/)的起點。 – trashgod 2012-01-31 05:15:04

+0

@ user1179522您是否嘗試編譯您的代碼? – 2012-01-31 07:24:44

回答

1

創建屏幕快照和循環雖然並不困難。 GraphicsDevice的Javadoc會告訴你如何獲得正確的屏幕尺寸。

我不認爲你能做的唯一事情就是迴應「顏色事件」​​。您可以輪詢屏幕以查看顏色何時更改。

import java.awt.Color; 
import java.awt.Rectangle; 
import java.awt.Robot; 
import java.awt.image.BufferedImage; 

public class FindColor 
{ 
    private static Rectangle rectangle = new Rectangle(800, 600); 

    public static void main(String[] args) throws Exception 
    { 
     Robot r = new Robot(); 
     BufferedImage image = r.createScreenCapture(rectangle); 
     search: for(int x = 0; x < rectangle.getWidth(); x++) 
     { 
      for(int y = 0; y < rectangle.getHeight(); y++) 
      { 
       if(image.getRGB(x, y) == Color.BLACK.getRGB()) 
       { 
        r.mouseMove(x, y); 
        System.out.println("Found!"); 
        break search; 
       } 
      } 
     } 
    } 
} 

-edit,因爲這個問題是expanded- 你不需要寫出來的圖像到磁盤,如果你要到那裏,然後檢查。 BufferedImage已經有一種方法來訪問單個像素,所以我不認爲有必要將像素數據轉換爲數組。

+0

但對於圖像捕捉,你可以搜索它的特定顏色正確的說,如果我想要鼠標點擊它發現的第一個亮藍色像素,我可以使用上述代碼來做到這一點?通過對顏色變化做出反應,我的意思是我會讓它繼續拍攝指定像素的照片,並且當像素不再=預設顏色時,如果您明白我的意思,我會再次點擊鼠標。 – user1179522 2012-01-31 05:31:56

+0

是的,你可以搜索任何顏色。你只需要修改一行「image.getRGB(x,y)== Color.BLACK.getRGB()」(我只是尋找黑色)對於顏色變化,你可以檢查過去的值現場或做複雜的圖像差異(取決於複雜性要求) – pimaster 2012-01-31 05:38:33

+0

你讓它聽起來很簡單讓我看看我有多糟糕,我可以搞砸了謝謝你 – user1179522 2012-01-31 05:42:25