Author Topic: Поиск картинки в найденном фрагменте  (Read 4824 times)

0 Members and 1 Guest are viewing this topic.

ejikplains

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Доброго времени суток! Я новичек в кликермане и переехал в него с другой пилотной программы....
Задача такая: имеется страница, где много одинаковых картинок и нужно кликнуть именно на нужную. Слева от картинок находятся ники пользователей, однако фон сзади у каждого пользователя разный. Путь решения решил сделать такой: принтскрин полосы с ником и картинкой, на которую нужно кликать, сделать её в пайнте в bmp и задать через параметр IF_PICTURE_IN поиск этой картинки.
Мне нужно, чтобы в найденном фрагменте найти другую картинку(в самом фрагменте) и на эту картинку нажать.
Вопрос: Как сделать поиск картинки в найденном фрагменте?
Так же принимаются и свои условия решения, ибо может мой ум еще не догадался как это сделать...

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Непонятно что там в чём искать и зачем. Ищи сразу нужную. Приложенный скрин с рамочками и стрелочками, возможно, прояснил бы ситуацию.
То, что ты применяешь IF_PICTURE_IN и вырезаешь в паинте не нужная информация. Думаю все знают как искать картинки  ;D


ejikplains

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Непонятно что там в чём искать и зачем. Ищи сразу нужную. Приложенный скрин с рамочками и стрелочками, возможно, прояснил бы ситуацию.
То, что ты применяешь IF_PICTURE_IN и вырезаешь в паинте не нужная информация. Думаю все знают как искать картинки  ;D
...
Ниже представлен скрин. Задний фон постоянно меняется то светлый, то темный. Мне нужно сделать так, чтобы находило постоянно именно нужного мне человека(моего мульта, но не суть) и после нахождения нажимала на крестик в виде двух клинков справа... но и тут подвох: если крестик серый, то выполняются действия по отмене боя у мульта, а если на него нажимается, то появляется совершенно другая страница... Помимо изменений цвета, естественно и положение постоянно меняется мульта(это список записавшихся игроков, естественно на месте стоять ник не будет).
Вот теперь собственно и вопрос: как мне сделать так, чтобы кликермен находил именно моего мульта и определял цвет вот этого крестика?
Решение выше писал(хотя больше как предложение решения и вопрос по его реализации) о поиске картинке внутри картинки. Может у вас какие идеи есть по решению?
...
З.Ы. - Просто поиск по крестику логично же не получится, ибо тогда будет рандомно бить по первому попавшемуся игроку.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Чтобы использовать прозрачность нужно закрасить все лишние пикселы в картинке каким то цветом и указать этот цвет в функции поиска
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", 9562555, 100)
   LCLICK($_return1, $_return2)
   WAITMS(100)
END_IF

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Мне нужно, чтобы в найденном фрагменте найти другую картинку(в самом фрагменте) и на эту картинку нажать.

Не нужно никакого поиска картинки в картинке... Нужен поиск одной картинки (ника) и при нахождении поиск другой картинки (или цвета) относительно первой найденной.
Можешь красить цвет прозрачности, а можешь сразу искать с цветокоррекцией COLORMODE 7? она тебе всё равно понадобится.
В мечах можно искать только один цвет (зелёный) вместо поиска картинки.

Code: (clickermann) [Select]
GETSCREEN(100,100,500,500)  // лучше ограничить область с твоей таблицей, чтоб не обрабатывать весь экран
COLORMODE(7, 100,100,500,500)  // применяем 7 уровень цветокоррекции
IF_PICTURE_IN(0,0, $_xmax,$_ymax, "nick.bmp", -1, 80)  // ищем ник
    // если найден ищем зелёный цвет в области мечей справа
    // 8388479 - зелёный в Colormode7
    // +300/0  до  +326/+25  - область с мечами для данного имени
    IF_PIXEL_IN($_return1+300, $_return2, $_return1+326, $_return2+25, 8388479)
        LCLICK($_return1+10, $_return2+10) // кликаем на 10 правее и ниже
        WAITMS(100)
    END_IF
ELSE
    WAITMS(50)
END_IF

Если можно искать не по имени, а по аватарке, то лучше по ней. Конечно если это уникальная аватарка игрока, а не общая клана.

P.S. и больше в таких примерах не выкладывай скрин в JPEG. Прикладывай сразу PNG или BMP без искажения цветов.
« Last Edit: April 27, 2017, 10:27:04 AM by Vint »


ejikplains

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Если можно искать не по имени, а по аватарке, то лучше по ней. Конечно если это уникальная аватарка игрока, а не общая клана.
P.S. и больше в таких примерах не выкладывай скрин в JPEG. Прикладывай сразу PNG или BMP без искажения цветов.
Тут уж извиняйте, первый раз на форуме и пока что правил не знаю, а появляться буду часто  ;).
...
Баааа, господа, вы навели на очень и очень простую и полезную мысль: зачем мне поиск картинке в картинке, если я могу просто кликать с сдвигами. Почему-то я о них забыл. Найду ник, подкорректирую сдвиг.... когда на серые мечи наживается. То выше надпись мол - игрок в бою. вот и пускай тыкает! if игрок в бою, то делай одно, а if прошел вызов, то делай другое.
...
Но это гемор строк на 100 ради одного пункта... попробую сначала ваш, после свой вариант. О цветокоррекциии я и не знал, спасиб.
...
Такой тогда вопрос: возможно ли организовать поиск текста по странице или по getscreen картинке?

ejikplains

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Чтобы использовать прозрачность нужно закрасить все лишние пикселы в картинке каким то цветом и указать этот цвет в функции поиска
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", 9562555, 100)
   LCLICK($_return1, $_return2)
   WAITMS(100)
END_IF
Получается, что можно кикнуть задний фон и искать уже после ник с сдвигом... Можно чуть подробнее расписать и как это работает? А то не могу сообразить...

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Получается, что можно кикнуть задний фон и искать уже после ник с сдвигом... Можно чуть подробнее расписать и как это работает? А то не могу сообразить...
Если бы у тебя был текст без сглаживания и/или всегда одинаково отображался, тогда можно было задать игнорируемый цвет фона.
В твоей ситуации это не прокатит. Там сами буквы пляшут (сглаживаются всегда по разному в зависимости от положения).


ejikplains

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Если бы у тебя был текст без сглаживания и/или всегда одинаково отображался, тогда можно было задать игнорируемый цвет фона.
В твоей ситуации это не прокатит. Там сами буквы пляшут (сглаживаются всегда по разному в зависимости от положения).
В общем пробую. Будут вопросы - задам тут )))

ejikplains

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Code: (clickermann) [Select]
GETSCREEN(100,100,500,500)  // лучше ограничить область с твоей таблицей, чтоб не обрабатывать весь экран
COLORMODE(7, 100,100,500,500)  // применяем 7 уровень цветокоррекции
IF_PICTURE_IN(0,0, $_xmax,$_ymax, "nick.bmp", -1, 80)  // ищем ник
    // если найден ищем зелёный цвет в области мечей справа
    // 8388479 - зелёный в Colormode7
    // +300/0  до  +326/+25  - область с мечами для данного имени
    IF_PIXEL_IN($_return1+300, $_return2, $_return1+326, $_return2+25, 8388479)
        LCLICK($_return1+10, $_return2+10) // кликаем на 10 правее и ниже
        WAITMS(100)
    END_IF
ELSE
    WAITMS(50)
END_IF
Попробовал. Кликермен зависает мгновенно, доходя до этого момента, причем отключение его на минуту стопорит полностью его работу и даже не открывается из своего окна. Чтобы понять в чем дело, ввел пошагово ввод в лог команд. Зависание происходит на строке с IF_PICTURE_IN(0,0, $_xmax,$_ymax, "nick.bmp", -1, 80) (зы - естественно nick.bmp менял на свою картинку).

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Поиск картинки в найденном фрагменте
« Reply #10 on: April 28, 2017, 10:44:54 PM »
просто в IF_PICTURE_IN(0,0, $_xmax,$_ymax, "nick.bmp", -1, 80) нужно было тоже ввести область поиска IF_PICTURE_IN(100,100,500,500, "nick.bmp", -1, 80).

100,100,500,500 - это из примера Vint'a, естественно координаты вводи свои.
второе, изза чего возможно зависание, это размер твоего образца "nick.bmp", естественно чем меньше тем лучше, и быстрее.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Поиск картинки в найденном фрагменте
« Reply #11 on: April 29, 2017, 09:41:20 AM »
Картинка "nick.bmp" должна быть не более 50x50