2012-07-31 35 views
0

我的當前代碼粘貼在下面,顯然只會得到像素(x,y)的顏色1,1,2, 2,3,3等等,直到找到與targetColor具有相同RGB值的顏色,並且它找不到比賽停止在1000,1000像素。有什麼更好的方法來做到這一點,所以我不僅得到像素合作伙伴1,1,2,2等的顏色。 ?如何獲得Robot.getPixelColor(x,y)方法的更大面積的像素?

而且我需要使用getPixelColor(x, y)方法,因爲我需要顏色的協調人,所以我可以單擊顏色位置。

import java.awt.Color; 
import java.awt.Robot; 

public class Colour 
{ 
    int x, y; 
    int n = 0; 
    int m = 0; 
    int i = 0; 

    public Colour() 
    { 
     try 
     { 
      Robot robot = new Robot(); 
      Color targetColor = new Color(255, 25, 255); 
      Color color = robot.getPixelColor(n, n); 

      while (color.getRGB() != targetColor.getRGB() && i != 1000) 
      { 
       color = robot.getPixelColor(n, n); 
       System.out.println("color = " + color); 
       n++; 
       i++; 

       if (color.getRGB() == targetColor.getRGB()) 
       { 
        i = 1000; 
        System.out.println("colour found" + n + " " + n); 
       } 
      } 
     } 
     catch (Exception e) 
     { 
     } 
    } 

    public static void main(String[] args) 
    { 
     Colour color = new Colour(); 
    } 
} 

如果我不清楚我問的是什麼,只是說,我會嘗試以更深入或更容易理解的方式解釋。

回答

0

您應該使用Robot.createScreenCapture(Rectangle screenRect)一次捕獲更大的區域。

這將返回BufferedImage,因此您可以使用任何常規技術來分析BufferedImage中的特定像素。一個BufferedImage基本上是一個圖像的內存表示,這是一個方便的形式來檢查和處理代碼。

如果您一次做了很多處理,將BufferedImage轉換爲ARGB值的int []數組是有意義的。

+0

我該怎麼做?我以前從未使用過BufferedImage或使用過createScreenCapture方法。我可能需要看一些javadocs課程,但感謝這個想法,我會跟進它 – JAVA 2012-07-31 09:20:52

0

從(0,0)訪問所有的像素(1000,1000)嘗試使用這樣的:

for(int i=0;i<=1000;i++){ 
    for(int j=0;j<=1000;j++){ 
     color = robot.getPixelColor(i, j); 
     System.out.println("color = " + color); 

     if(color.getRGB() == targetColor.getRGB()){ 
      System.out.println("colour found" + i + " " + j); 
      i=1000; 
      break; 
     } 
    } 
} 

與此更換while循環,你應該罰款。

+0

但我和j都會增加一個循環,所以他們將相同的高達1000?我認爲 – JAVA 2012-07-31 10:22:40

+0

不,j會增加每個循環,當j達到1000時,我將增加1,j將重置爲0。 – Dahaka 2012-07-31 11:24:46

相關問題