Author Topic: Поиск картинки с прозрачным фоном  (Read 4536 times)

0 Members and 1 Guest are viewing this topic.

tekton

  • Освоившийся
  • **
  • Posts: 29
    • View Profile
Приветствую.
Столкнулся с проблемой.
Есть карта, на ней такие значки.
Проблема заключается в том, что значки имеют прозрачный фон.
При наложении на карту, фон просвечивает и изображение изменяется.
Можно ли как нибудь решить эту проблему?
Вот скрин [spoiler=Открыть][/spoiler]
Оригинальные скриншоты в атаче.

tekton

  • Освоившийся
  • **
  • Posts: 29
    • View Profile
Re: Поиск картинки с прозрачным фоном
« Reply #1 on: March 09, 2016, 12:22:51 AM »
Просто значки двух видов.
С камнем и с деревом.
Мне надо их различать.

Короче мне надо сделать так, чтоб при передвижении по карте, при появлении определённого значка,  скидывались его кардинаты в игре.

Как скинуть координаты я придумал, а вот  значки чёт не ищутся. :(
Или я криво вырезал картинку, а может сохранил не правильно в .bmp (Но делал через [spoiler]
Code: [Select]
GETSCREEN
SCREENSHOTEX(0,0, $_xmax,$_ymax, "Image_", 0)
HALT
[/spoiler]), или и впрямь она полупрозрачная, и от фона, цвет меняется и  сравнение не находит её, хз. 

Короче надо найти картинку,
кликнуть по ней,
скинуть координаты,
Проверить есть ли уже такая,
 и ждать следующую.

Пишу код такого типа

Code: [Select]
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", -1, 100)

//------------ Клик по значку --------------------
  LCLICK($_return1, $_return2)

//------------ Сброс картинки с координатами --------------------
getscreen(38,591, 92,601) 
screenshotex(38,591, 92,601,kard)   
//------------ End Сброс картинки с координатами --------------------

WAITMS(100)
END_IF
Всё правильно в коде ?

а потом надо сделать распознаватель координат (типа как капчу анализируют)

 
« Last Edit: March 09, 2016, 08:55:47 AM by tekton »

tekton

  • Освоившийся
  • **
  • Posts: 29
    • View Profile
Re: Поиск картинки с прозрачным фоном
« Reply #2 on: March 09, 2016, 01:56:47 AM »
Проблема осталась,
взял и самим кликерманом повырезал фрагменты через
Code: [Select]
getscreen(37,589, 92,600)
screenshotex(37,589, 92,600,kard)
HALT
Но скрипт работает только при первом запуске .

Вот видео как всё происходит.  [spoiler] https://youtu.be/RLg01C5BB3M [/spoiler]
Короче задача такая.
Сканировать карту и искать координаты значков.

Нашли значёк,
кликнули на него, 
Сбросили координаты,
Потом распознали их как капчу.
Записали координаты в лог.

Перешли к следующему нужному значку....
Кликнули...
Сбросили кооры...

Когда нужные значки на экране закончились,
передвинули экран до следующего, опять отсканировали все нужные значки...
И так до конца координат (1285:1285)



« Last Edit: March 09, 2016, 08:57:25 AM by tekton »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Поиск картинки с прозрачным фоном
« Reply #3 on: March 09, 2016, 09:12:58 AM »
А что координаты скопировать нельзя? Они там вроде выделяются.

tekton

  • Освоившийся
  • **
  • Posts: 29
    • View Profile
Re: Поиск картинки с прозрачным фоном
« Reply #4 on: March 09, 2016, 09:23:20 AM »
А что координаты скопировать нельзя? Они там вроде выделяются.
Во блин,  точно !   Я как то не обратил на это внимание.
А как быть с картинкой?
я вот уже подумал, как бы для теста сделать попиксельное сравнение разных значков.
Может есть на форуме где такое ?
Типа если различается пиксел, закрасить его красным, чтоб наглядно было видно где не соответствие и какая область нам подойдёт.

Oraven спасибо тебе огромное! Не первый раз помогаешь. :)
Только что то не вижу кнопочки что бы в репку плюсануть...

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Поиск картинки с прозрачным фоном
« Reply #5 on: March 09, 2016, 09:23:43 AM »
Строки действительно нужно заключать в кавычки иначе если твоя писанина будет похожа на имя функции произойдет ошибка.
Там в редакторе есть мусорные ведра, так вот это закоментировать или раскомментировать.

Тебе нужно использовать SCANPICTURE чтобы найти все координаты таких картинок.
Code: (clickermann) [Select]
GETSCREEN
SCANPICTURE($ARR_SCAN, 0,0, $_xmax,$_ymax, "picture.bmp", -1, 100)
FOR($ARR_NUM=0,$ARR_NUM<ARRSIZE($ARR_SCAN),2)
   LCLICK($ARR_SCAN[$ARR_NUM], $ARR_SCAN[$ARR_NUM+1])   // Клик
   WAITMS(100)
END_CYC
UNDEFINE($ARR_SCAN)

Используй цветокоррекцию и процент совпадения и проблема прозрачного фона и меняющихся пикселов отпадет
Вот таким скриптом получаешь снимок
Code: (clickermann) [Select]
// Получение скриншота с цветокоррекцией (фильтр 6)
GETSCREEN
COLORMODE(6)
SCREENSHOT
HALT

В графическом редакторе вырезаешь что нужно.
Тот же уровень используешь в своем скрипте

Code: (clickermann) [Select]
GETSCREEN
COLORMODE(6) // цветокоррекция
SCANPICTURE($ARR_SCAN, 0,0, $_xmax,$_ymax, "picture.bmp", -1, 70) // 70% от совпадения
FOR($ARR_NUM=0,$ARR_NUM<ARRSIZE($ARR_SCAN),2)
   LCLICK($ARR_SCAN[$ARR_NUM], $ARR_SCAN[$ARR_NUM+1])   // Клик
   WAITMS(100)
END_CYC
UNDEFINE($ARR_SCAN)