Java Robot, поиск определенных изображений на экране

Я пытаюсь использовать класс Java Robot для создания бота, чтобы автоматизировать некоторые утомительные задачи для меня, я никогда не использовал класс Robot. Я просмотрел класс в документации по Java, его использование кажется простым, но у меня есть проблема с эффективным поиском определенного изображения (я говорю, изображение, я имею в виду определенную часть экрана). Есть ли другой способ, кроме загрузки количества пикселей "х", проверки их, проверки следующей суммы и т. Д., Пока я не найду искомое изображение? Также есть какой-нибудь список идентификаторов Button и MouseButton, необходимых для класса Java Robot, поскольку я не могу их найти.

1 ответ

Решение

Для идентификаторов кнопок мыши вы должны использовать BUTTON1_MASK и другие константы маски кнопок из java.awt.event.MouseEvent. Например, чтобы щелкнуть мышью, вы должны сделать что-то вроде:

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

Я считаю, что BUTTON1_MASK - это левая кнопка мыши, BUTTON2_MASK - средняя кнопка мыши, а BUTTON3_MASK - правая кнопка мыши, но с тех пор, как я использовал Robot, прошел месяц или около того.

Что касается проверки изображения, я понятия не имею, как это обычно делается. Но способ, который вы указали в своем вопросе, где вы просто проверяете каждую группу пикселей, не должен быть слишком дорогим в вычислительном отношении, потому что вы можете получить изображение экрана в виде массива примитивов, а затем просто получить доступ к нужному пикселю с небольшим количеством математики. Таким образом, при проверке "прямоугольника" пикселей, в которых вы ищете свое изображение, проверяйте только пиксели, пока они совпадают. В тот момент, когда вы найдете пиксель, который не совпадает, переходите к следующему "прямоугольнику" пикселей. Вероятность того, что вы найдете группу пикселей, соответствующих изображению, которое в конечном итоге не будет изображением, чрезвычайно мала, а это означает, что для каждого прямоугольника нужно будет проверять в среднем только 5 или менее пикселей. Любое программное обеспечение, которое выполняет эту задачу, должно было бы проверять каждый пиксель на экране по крайней мере один раз (если только оно не делает несколько ярлыков / предположений, основанных на вероятностях изменения изображения), и алгоритм, который я описал, проверял бы каждый пиксель примерно 5 раз, поэтому это не так уж плохо для реализации, если у вас нет огромного изображения для проверки.

Надеюсь это поможет!

Другие вопросы по тегам