首页 文章

用java响应颜色事件

提问于
浏览
0

我正在构建一个java应用程序来解决难题 . 我编码的方式基本上是程序将采取屏幕截图,在屏幕截图中找到一个像素,并通过机器人功能将鼠标移动到桌面上的那个位置 . 我理解屏幕截图背后的理论,将其存储在一个数组中,探索数组直到一个存储的像素与正确的颜色组合弹出,并将鼠标移动到屏幕上的那个位置,但我不能为我的生活得到代码下来 . 如果有人知道,或者可以将一个采用屏幕截图的示例代码拼凑在一起,将其存储在一个数组中(或者我不知道数组是否适合此特定用途的存储设备)从该数组中找到一个像素移动鼠标到像素位置,然后清除数组,我会非常惊人,因为这让我疯了!

到目前为止我有:

public static void main(String [] args)throws Exception {

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;
            }
        }
    }
}

}

我有三个错误:

  • 非法启动表达式,指针指向下面的get in code段

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

  • 非法启动表达式,指针指向下面代码段中的Size

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

  • ;预期指标指向矩形矩形

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

1 回答

  • 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自问题扩展以来 - 如果要在那里检查它,则不需要将映像写入磁盘 . BufferedImage已经有办法访问各个像素,因此我认为不需要将像素数据转换为数组 .

相关问题