Author Topic: Повисает программа при использовании IF_PICTURE_IN  (Read 2291 times)

0 Members and 1 Guest are viewing this topic.

barnybad

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Здравствуйте, отлаживаю модуль инициализации координат окон в Еve онлайн, но вот столкнулся с таким моментом, когда все 4 картинки находятся на экране, выполнение скрипта занимает 1-2 сек, а если этих изображений нет, то программа  Clickermann подвисает(не отвечает) где то на минуту что бы выполнить скрипт.
У меня Win7, i-5 1.7GHz, 4Gb ОЗУ
Это из за того что у меня слабый ноут или что то со скриптом не так?
Может необходимо увеличить/уменьшить искомые изображения? обозначение bgcolor увеличивает скорость выполнения?
 
Code: (clickermann) [Select]
#name "Поиск окон"
GETSCREEN($_xmin,$_ymin,$_xmax,456)
COLORMODE(6,$_xmin,$_ymin,$_xmax,456)
IF_PICTURE_IN($_xmin,$_ymin,$_xmax,456,"Drons.bmp",4144959,95)
   PRINT("X ",$_return1," Y ",$_return2)
ELSE
   PRINT("Drons nf")
END_IF
IF_PICTURE_IN($_xmin,$_ymin,$_xmax,456,"Object.bmp",4144959,95)
   PRINT("X ",$_return1," Y ",$_return2)
ELSE
   PRINT("Object nf")
END_IF
IF_PICTURE_IN($_xmin,$_ymin,$_xmax,456,"Overview.bmp",4144959,95)
   PRINT("X ",$_return1," Y ",$_return2)
ELSE
   PRINT("Overview nf")
END_IF
IF_PICTURE_IN($_xmin,$_ymin,$_xmax,456,"SanshaHaven.bmp",4144959,100)
   PRINT("X ",$_return1," Y ",$_return2)
ELSE
   PRINT("SanshaHaven nf")
END_IF
HALT

barnybad

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Уменьшил области поиска(хотя разрешение и так не большое как мне кажется 1280*720), повысил параметры [currency] до 99-100, 100% не всегда срабатывает, если окно выделено оно немного меняет обрамление,  попробовал уменьшить искомые изображения, как то стало хуже искать, вернул обратно. В итоге удалось сократить время выполнения(подвисания) скрипта до 10 сек, если не одно изображение не найдено. Еще вопрос можно ли исключить два цвета с помощью параметра  [bgcolor]?
Пробовал писать так:
Code: (clickermann) [Select]
IF_PICTURE_IN($_xmin,$_ymin,$_xmax,$_ymax,"Object.bmp",(4144959 OR 255),95)

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Еще вопрос можно ли исключить два цвета с помощью параметра  [bgcolor]?
Пробовал писать так:
Code: (clickermann) [Select]
IF_PICTURE_IN($_xmin,$_ymin,$_xmax,$_ymax,"Object.bmp",(4144959 OR 255),95)

Нет это так не делается. Ты должен сам выбрать какой то цвет и зарисовать этим цветом, в графическом редакторе, все лишнее!
Обычно я выбираю яркозеленый, вобщем такой цвет которого явно нет на искомой картинке.

Vint

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

Это очень большое время.
При указанных данных остаётся две причины.
1. Помимо монитора 1280*720 подключен ещё [4k  :)]
2. Один или все образцы сделаны слишком большими.

Скорее вторая причина. Приемлемый размер образцов до 50х50 px. Обычно это в районе 5-20 в зависимости от надобности. Может быть и длинный узкий образец 100х3 или 200х2, особенно при проверке текстов.


barnybad

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
В приложении архив со всеми картинками, можете попробовать у себя запустить, посмотреть сколько будет искать на картинке для анализа(ее я открывал стандартным просмоторщиком изображений и ставил "реальный размер", еще надо в скрипте закоментить COLORMODE, хотя и так срабатывало).
1. Монитор у меня один с разрешением 1366*768 :)
2. Размеры образцов следующие
39x18
35x17
39x17
53x12
Код тоже подправил:
Code: (clickermann) [Select]
#name "Поиск окон"
SUB(InitWindows)
   GETSCREEN(33,$_ymin,1143,150)
   COLORMODE(6,33,$_ymin,1143,150)
   IF_PICTURE_IN(33,$_ymin,1143,150,"Drons.bmp",4144959,99)
      PRINT("Дроны X=",$_return1," Y=",$_return2)
   ELSE
      PRINT("Дроны не найдены")
   END_IF
   IF_PICTURE_IN(33,$_ymin,1143,150,"Object.bmp",4144959,98)
      PRINT("Объект X=",$_return1," Y=",$_return2)
   ELSE
      PRINT("Объекты не найдены")
   END_IF
   IF_PICTURE_IN(33,$_ymin,1143,150,"Overview.bmp",4144959,99)
      PRINT("Обзорная X=",$_return1," Y=",$_return2)
   ELSE
      PRINT("Обзорная не найдена")
   END_IF
END_SUB 
SUB(SearchSanshaHaven)
   GETSCREEN(33,$_ymin,600,517)
   COLORMODE(6,33,$_ymin,600,517)
   IF_PICTURE_IN(33,$_ymin,600,517,"SanshaHaven.bmp",4144959,100)
      PRINT("Гавань X=",$_return1," Y=",$_return2)
   ELSE
      PRINT("Гавань не найдена")
   END_IF
END_SUB
InitWindows()
SearchSanshaHaven()
HALT