如何为Robot.getPixelColor(x,y)方法获得更大的像素区域?

时间:2012-07-31 09:11:28

标签: java

下面粘贴的当前代码显然只会获得像素(x,y)1,12, 23,3等颜色,直到找到颜色为止与targetColor相同的RGB值,如果找不到1000,1000像素的匹配停止点。什么是更好的方法,所以我不仅得到像素共同点1,12,2等的颜色。 ?

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

如果我不清楚我的问题,请说出来,我会尝试更深入或更容易理解。

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分: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循环,你应该没问题。