0

我当前粘贴在下面的代码显然只会获取像素(x,y)1,1, 等等的颜色,直到它找到具有相同 RGB 值的颜色,2, 2并且如果它没有在像素处找到匹配停止。有什么更好的方法可以做到这一点,所以我不仅得到了像素坐标的颜色,等等。?3,3targetColor1000,10001,12,2

AND我需要使用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();
    }
}

如果我不清楚我问的内容,请直说,我会尝试更深入或更易于理解的方式进行解释。

4

2 回答 2

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循环,你应该没问题。

于 2012-07-31T10:03:23.460 回答
0

您可能应该使用Robot.createScreenCapture(Rectangle screenRect)一次捕获更大的区域。

这将返回一个BufferedImage,因此您可以使用任何常规技术来分析 BufferedImage 中的特定像素。BufferedImage 基本上是图像的内存表示形式,是通过代码检查和操作的一种方便形式。

如果您同时进行大量处理,则将 BufferedImage 转换为 ARGB 值的 int[] 数组是有意义的。

于 2012-07-31T09:15:32.037 回答