Java机器人,在屏幕上查找某些图像

标签 java pixel awtrobot

我正在尝试使用 Java Robot 类创建一个机器人来自动执行一些繁琐的任务,我从未使用过 Robot 类。我已经在Java文档中查找了该类,用法似乎很简单,但我在有效地找到某个图像(我说图像,我的意思是屏幕的某个部分)时遇到了问题。除了加载“x”数量的像素、检查它们、检查下一个数量等直到找到我正在寻找的图像之外,还有其他方法吗?还有 Java Robot 类所需的 Button 和 MouseButton 标识符的列表吗,因为我找不到任何列表。

最佳答案

对于鼠标按钮标识符,您应该使用 java.awt.event.MouseEvent 中的 BUTTON1_MASK 和其他按钮掩码常量。例如,要单击鼠标,您需要执行以下操作:

Robot r = new Robot();
r.mousePress(MouseEvent.BUTTON1_MASK);
r.mouseRelease(MouseEvent.BUTTON1_MASK);

我相信BUTTON1_MASK是鼠标左键,BUTTON2_MASK是鼠标中键,BUTTON3_MASK是鼠标右键,但自从我使用Robot以来已经有一个月左右了。

至于检查图像,我不知道通常是如何完成的。但是,您在问题中指定的仅检查每组像素的方式在计算上应该不会太昂贵,因为您可以将屏幕图像作为基元数组获取,然后只需通过一些数学操作即可访问所需的像素。因此,当检查要在其中搜索图像的像素“矩形”时,只要像素保持匹配,就继续检查像素。当您发现不匹配的像素时,请移至下一个像素“矩形”。您会发现一堆与图像匹配但最终不是图像的像素的概率极低,这意味着每个矩形平均只需要检查大约 5 个或更少的像素。任何执行此任务的软件都必须至少检查屏幕上的每个像素一次(除非它根据图像变化发生的概率做出一些快捷方式/假设),并且我描述的算法将检查每个像素大约 5 次,所以实现起来并没有那么糟糕,除非您有一个巨大的图像需要检查。

希望这有帮助!

关于Java机器人,在屏幕上查找某些图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24476112/

相关文章:

c - C 语言编程中的图形

python - TkInter:直线/椭圆的像素数

Linux 上的 Java Robot - 无大写字符(使用 x11vnc )

java - 如何使用 EntityManager 通过 id 查找实体而不在一次查询中命中缓存?

java - getter 和 setter 并增加一个变量

java - Activity 通过接口(interface)向 Fragment 发送数据

php gd 像素化太锐利

java - 如何用java模拟真实的鼠标点击?

java - 如何使用 Java 机器人类获取按键欧洲 "è"字符

java - 了解如何在 hibernate 中的急切(非惰性)加载中获取对象