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

#java #pixel #awtrobot

#java #пиксель #awtrobot

Вопрос:

Я пытаюсь использовать класс Java Robot для создания бота для автоматизации некоторых утомительных задач для меня, я никогда не использовал класс Robot. Я просмотрел класс в Java docs, использование кажется простым, но у меня проблема с поиском определенного изображения (я говорю изображение, я имею в виду определенную часть экрана) эффективно. Есть ли какой-либо другой способ, кроме загрузки количества пикселей ‘x’, их проверки, проверки следующего количества и т. Д., Пока я не найду изображение, которое я ищу? Также существует ли какой-либо список идентификаторов кнопок и кнопок мыши, необходимых для класса 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 раз, так что это не так уж плохо для реализации, если вы ненужно проверить огромное изображение.

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