Основной раздел > Общие вопросы

IF_PICTURE_IN - Для новичков

(1/24) > >>

Hito:
Очень часто вижу на форуме, как новички пытаются разобраться в том, как находить нужную картинку на экране. Мне это понятно, так как несколько лет назад сам тут ломал голову не одни сутки над этим ))) Решил написать для новичков подробный мануал на эту тему. Приступим...

1:
Начнем с того, что у  Clickermann-а, как и у других программ, нет реальных глаз, как у человека, и для того, чтобы "визуально" работать с экраном, ему нужно сделать снимок этого экрана и поместить в свой графический буфер. Вот этот снимок он и делает с помощью команды GETSCREEN. Если эта команада без координат, то Clickermann помещает в свой графический буфер скриншот ВСЕГО вашего экрана. Если же будут указаны координаты, как - GETSCREEN (x1, y1, x2, y2 ), то Clickermann поместит в свой графический буфер скриншот, сделанный строго в указанных координатах. Поехали дальше...

2:
Если после GETSCREEN (в следующей строке) вы используете команду COLORMODE и указываете режим COLORMODE-а, как - COLORMODE(5), то в буфер Clickermann-а поступает не та картинка, которая находится на вашем экране, а измененная, в зависимости от режима, указанного в команде COLORMODE. Для наглядности (чтобы было понятно) можно поиграться со следующим кодом. Только прежде, чем его запускать в кликере, сохраните этот скрипт в какую-либо папку.

--- Code: (clickermann) ---GETSCREEN // Clickermann помещает в свой графический буфер скриншот вашего экрана
COLORMODE(3) // Применяет к этому скриншоту режим COLORMODE
SCREENSHOTFIX(0,0, $_xmax,$_ymax, "file.bmp") // Сохроняет скриншот, находящийся в его буфере, в папку, в которой будет сохранен этот скрипт
HALT // Останавливает скрипт
--- End code ---
После того, как скрипт отработает, в папке, в которой он сохранен, появится скриншот вашего экрана. Откройте этот скриншот и посмотрите его. Потом установите в скрипте другой режим COLORMODE - к примеру COLORMODE(6), и повторите операцию. Вы увидите разницу, между первым скрином и тем, что появится во второй раз. Проанализировав эту разницу, вы можете понять - как работает команда COLORMODE. Идем далее...

3:
После того, как Clickermann отскринит ваш экран и поместит скрин в свой графический буфер, он будет готов приступить к анализу этого скриншота. В нашем случае, он будет готов к поиску вашей заготовленной картинки на том скриншоте, который находится в буфере Clickermann-а. Имейте в виду, что та заготовка картинки, которую вы будете искать, должна быть сделана в соответствующем режиме COLORMODE, который Clickermann применял к скриншоту вашего экрана, при помещении его в свой буфер, для анализа. Поиском картинки у нас занимается оператор - IF_PICTURE_IN. Не трудно понять, что перефразируя с английского языка, это выглядит как - ЕСЛИ_КАРТИНКА_В. И так, рассмотрим этот оператор подробнее...

--- Code: (clickermann) ---IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", -1, 100)
// IF_PICTURE_IN - Это - оператор, который говорит Clickermann-у о том, чем он будет заниматься, а именно - искать картинку
// 0,0, $_xmax,$_ymax - Это координаты, в которых Clickermann будет искать картинку
// file.bmp - Это собственно наш заготовленный скриншот, который мы будем искать "на экране"
// О таких параметрах, как -1 и 100, вполне понятно написано в справке Clickermann-а
--- End code ---
Думаю, что с этим тоже разобрались...

4:
Далее у нас идет оператор END_IF, говорящий о закрытии условия - ЕСЛИ_КАРТИНКА_В
Есть еще один оператор, который мы можем использовать во всей этой теме. Это - ELSE. Вариантов перевода этого оператора с английского языка не мало, но в нашем случае подходит вариант - ИНАЧЕ. Вот, как выглядит полностью наш скрипт вместе с этим оператором:

--- Code: (clickermann) ---GETSCREEN // Clickermann помещает в свой графический буфер скриншот вашего экрана
COLORMODE(3) // Применяет к этому скриншоту режим COLORMODE
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", -1, 100) // "ЕСЛИ_КАРТИНКА_В..." - ищет картинку в заданных координатах на скрине, находящемся в буфере.
   // Тут мы прописываем команды на случай, если картинка найдена.
ELSE // "ИНАЧЕ"
   // Тут прописываем действия на случай, если картинка не найдена.
END_IF // КОНЕЦ_"ЕСЛИ..." - конец условия
--- End code ---

5:
Теперь создадим скрин, который в последствии будем искать на экране. Создадим скрин цифры "3:". Вставляем код в кликер, который дан в пункте "2:" этого поста, а далее смотрим видео...
https://www.youtube.com/watch?v=aasgn66DgtE

Hito:

--- Quote from: open_78 on March 07, 2019, 02:22:28 PM ---Еще необходимо описать процедуру подготовки и сохранения картинки в PAINT-е. У многих с этим возникают огромные трудности.
И можно в типовые алгоритмы отправлять.

--- End quote ---
Добавил )

Alexxx:
Спасибо за информацию. Проясните пару моментов, пожалуйста.
 1). Получение скриншота небольшой области экрана как то ускоряет процесс в сравнении со скриншотом всего экрана, скажем, в Windows7(10)?
 2). Как на скриншоте части экрана задаются координаты поиска нужной области - от края полученной картинки или от края экрана?

Oraven:

--- Quote from: Alexxx on March 09, 2019, 02:33:59 PM ---Спасибо за информацию. Проясните пару моментов, пожалуйста.
 1). Получение скриншота небольшой области экрана как то ускоряет процесс в сравнении со скриншотом всего экрана, скажем, в Windows7(10)?
 2). Как на скриншоте части экрана задаются координаты поиска нужной области - от края полученной картинки или от края экрана?

--- End quote ---

1. При указании маленькой области снимка при разрешении например 1920х1080 сам процесс GETSCREEN отрабатывает в разы быстрее.

2. Размер скриншота не изменяется, просто обновляется только указанная область. Остальная часть снимка может содержать части старых снимков, если был снимок всего экрана, или вообще остаться черной.

Hito:

--- Quote from: Oraven on March 09, 2019, 05:52:07 PM ---2. Размер скриншота не изменяется, просто обновляется только указанная область. Остальная часть снимка может содержать части старых снимков, если был снимок всего экрана, или вообще остаться черной.

--- End quote ---
Хм... А почему тогда, если я скриню пол экрана, то при SCREENSHOTFIX(0,0, $_xmax,$_ymax, "file.bmp"), у меня сохроняется скрин, на ктором только пол экрана...?

Navigation

[0] Message Index

[#] Next page

Go to full version