java - 用java响应颜色事件

标签 java awt screenshot awtrobot getpixel

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

到目前为止我已经:

public static void main(String[] args) 抛出异常{

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

}

我收到三个错误:

  1. 表达式开始非法,指示器指向下面的get in代码段

    私有(private)静态矩形矩形=新矩形(Toolkit.getDefaultToolkit().getScreenSize());

  2. 表达式开始非法,指示器指向下面代码段中的 Size

    私有(private)静态矩形矩形=新矩形(Toolkit.getDefaultToolkit().getScreenSize());

  3. ;预期指标指向 Rectangle 矩形

    私有(private)静态矩形矩形=新矩形(Toolkit.getDefaultToolkit().getScreenSize());

最佳答案

创建屏幕截图并循环播放,但这并不难。 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;
                }
            }
        }
    }
}

-由于问题已扩展而进行编辑- 如果您要立即检查图像,则无需将图像写入磁盘。 BufferedImage已经有一种方法来访问各个像素,因此我认为不需要将像素数据转换为数组。

关于java - 用java响应颜色事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9074566/

相关文章:

JavaFX 复杂字符串绑定(bind)

java - Maven JSP 标签库原型(prototype)

使用反射使用任何构造函数实例化任何类的 Java 泛型方法

java - 我应该担心使用 AWTUtilities.setWindowShape() 吗?

python - 如何在Python中的Selenium中截取相同窗口大小的屏幕截图?

java - 为什么我的 EntityManager Helper 类返回以前的查询结果以及如何修复它?

java - JComboBox 下拉菜单不遵守 AlwaysOnTop

java - 窗口的内容在最小化时消失

groovy - Katalon 和 Chrome headless 模式的屏幕截图

excel - 如何使用VBA截取网页截图?