下面粘贴的当前代码显然只会获得像素(x,y)1,1
,2, 2
,3,3
等颜色,直到找到颜色为止与targetColor
相同的RGB值,如果找不到1000,1000
像素的匹配停止点。什么是更好的方法,所以我不仅得到像素共同点1,1
,2,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();
}
}
如果我不清楚我的问题,请说出来,我会尝试更深入或更容易理解。
答案 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循环,你应该没问题。