Автор Тема: IF_PICTURE_IN - Для новичков  (Прочитано 46530 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Иван_Васильевич

  • Освоившийся
  • **
  • Сообщений: 51
    • Просмотр профиля
Re: IF_PICTURE_IN - Для новичков
« Ответ #90 : Январь 12, 2022, 11:51:54 pm »
Код: Clickermann
  1. // 12.01.2022
  2. #name "New herb"
  3. SUB(herb, $par1, $par2) // подпрограмма с параметрами
  4.   GETSCREEN(26,597,367,1090)
  5.   COLORMODE(6,26,597,367,1090)
  6.   SCREENSHOTFIX(26,597,367,1090,$par1)
  7.   IF_PIXEL_IN(26,597,367,1090,$par2)
  8.      KEYDOWN(#ctrl)
  9.      WAITMS(100)
  10.      LCLICK($_return1, $_return2)
  11.      WAITMS(100)
  12.      KEYUP(#ctrl)
  13.      WAITMS(200)
  14.   END_IF
  15. END_SUB
  16.  
  17. herb("herb.bmp",8355647) // вызов подпрограммы (обязательно ниже подпрограммы)
  18. herb("herb1.bmp",8355839)
  19. herb("herb2.bmp",8388607)
  20.  
  21. GETSCREEN(61,382,343,413)
  22. IF_PIXEL_IN(61,382, 343,413, 269907)
  23.   LCLICK($_return1, $_return2)
  24.   WAITMS(500)
  25. END_IF
  26.  
  27. HALT
  28.  
GETSCREEN(26,597,367,1090)
   COLORMODE(6,26,597,367,1090)
   SCREENSHOTFIX(26,597,367,1090,$par1)
 о какой оптимальности можно говорить если этот скрипт трижды сканирует одну область и трижды подряд сохраняет её как картинку под разными названиями!
в чём смысл утраивания усилий?
 Было-бы логично  сначала проверять цвет пикселя а уже в зависимости от найденного цвета, обновлять картинку, а так
только команда HALT спасает от перегрузки компа ненужными и ресурсоёмкими действиями. действиями
Код: Clickermann
  1. // 12.01.2022
  2. #name "New herb2"
  3. SUB(herb, $par1, $par2) // подпрограмма с параметрами
  4.   IF_PIXEL_IN(26,597,367,1090,$par2)
  5.      SCREENSHOTFIX(26,597,367,1090,$par1)
  6.      KEYDOWN(#ctrl)
  7.      WAITMS(100)
  8.      LCLICK($_return1, $_return2)
  9.      WAITMS(100)
  10.      KEYUP(#ctrl)
  11.      WAITMS(200)
  12.   END_IF
  13. END_SUB
  14. GETSCREEN(26,597,367,1090)
  15. COLORMODE(6,26,597,367,1090)
  16. herb("herb.bmp",8355647) // вызов подпрограммы (обязательно ниже подпрограммы)
  17. herb("herb1.bmp",8355839)
  18. herb("herb2.bmp",8388607)
  19.  
  20. GETSCREEN(61,382,343,413)
  21. IF_PIXEL_IN(61,382, 343,413, 269907)
  22.   LCLICK($_return1, $_return2)
  23.   WAITMS(500)
  24. END_IF
  25.  
  26. HALT
  27.  

Aleksey999

  • Зашел в гости
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: IF_PICTURE_IN - Для новичков
« Ответ #91 : Январь 13, 2022, 06:27:39 pm »
Код: Clickermann
  1. // 12.01.2022
  2. #name "New herb"
  3. SUB(herb, $par1, $par2) // подпрограмма с параметрами
  4.   GETSCREEN(26,597,367,1090)
  5.   COLORMODE(6,26,597,367,1090)
  6.   SCREENSHOTFIX(26,597,367,1090,$par1)
  7.   IF_PIXEL_IN(26,597,367,1090,$par2)
  8.      KEYDOWN(#ctrl)
  9.      WAITMS(100)
  10.      LCLICK($_return1, $_return2)
  11.      WAITMS(100)
  12.      KEYUP(#ctrl)
  13.      WAITMS(200)
  14.   END_IF
  15. END_SUB
  16.  
  17. herb("herb.bmp",8355647) // вызов подпрограммы (обязательно ниже подпрограммы)
  18. herb("herb1.bmp",8355839)
  19. herb("herb2.bmp",8388607)
  20.  
  21. GETSCREEN(61,382,343,413)
  22. IF_PIXEL_IN(61,382, 343,413, 269907)
  23.   LCLICK($_return1, $_return2)
  24.   WAITMS(500)
  25. END_IF
  26.  
  27. HALT
  28.  
GETSCREEN(26,597,367,1090)
   COLORMODE(6,26,597,367,1090)
   SCREENSHOTFIX(26,597,367,1090,$par1)
 о какой оптимальности можно говорить если этот скрипт трижды сканирует одну область и трижды подряд сохраняет её как картинку под разными названиями!
в чём смысл утраивания усилий?
 Было-бы логично  сначала проверять цвет пикселя а уже в зависимости от найденного цвета, обновлять картинку, а так
только команда HALT спасает от перегрузки компа ненужными и ресурсоёмкими действиями. действиями
Код: Clickermann
  1. // 12.01.2022
  2. #name "New herb2"
  3. SUB(herb, $par1, $par2) // подпрограмма с параметрами
  4.   IF_PIXEL_IN(26,597,367,1090,$par2)
  5.      SCREENSHOTFIX(26,597,367,1090,$par1)
  6.      KEYDOWN(#ctrl)
  7.      WAITMS(100)
  8.      LCLICK($_return1, $_return2)
  9.      WAITMS(100)
  10.      KEYUP(#ctrl)
  11.      WAITMS(200)
  12.   END_IF
  13. END_SUB
  14. GETSCREEN(26,597,367,1090)
  15. COLORMODE(6,26,597,367,1090)
  16. herb("herb.bmp",8355647) // вызов подпрограммы (обязательно ниже подпрограммы)
  17. herb("herb1.bmp",8355839)
  18. herb("herb2.bmp",8388607)
  19.  
  20. GETSCREEN(61,382,343,413)
  21. IF_PIXEL_IN(61,382, 343,413, 269907)
  22.   LCLICK($_return1, $_return2)
  23.   WAITMS(500)
  24. END_IF
  25.  
  26. HALT
  27.  

dramster, спасибо за ответ. Учту ваше замечание на будущее.

Иван_Васильевич, Огромная благодарность за рабочий скрипт с "программой с параметрами". Благодаря этому примеру получил понимание как работает эта программа с параметрами.
В итоге получил вот такой вариант, при котором делается один скриншот и по нему кликликер отыскивает 3 контрольных пикселя:


Код: Clickermann
  1.  
  2. // 12.01.2022
  3. #name "New herb2"
  4. SUB(herb, $par1)  
  5.   IF_PIXEL_IN(2,807,345,1304,$par1)
  6.      KEYDOWN(#ctrl)
  7.      WAITMS(100)
  8.      LCLICK($_return1, $_return2)
  9.      WAITMS(100)
  10.      KEYUP(#ctrl)
  11.      WAITMS(200)
  12.   END_IF
  13. END_SUB
  14.  
  15. GETSCREEN(2,807,345,1304)
  16. COLORMODE(6,2,807,345,1304)
  17. SCREENSHOTFIX(2,807,345,1304,"herb.bmp")
  18.  
  19. herb(8355647)
  20. herb(4194175)
  21. herb(8388607)
  22.  
  23. GETSCREEN(61,382,343,413)
  24. IF_PIXEL_IN(61,382, 343,413, 269907)
  25.   LCLICK($_return1, $_return2)
  26.   WAITMS(100)
  27. END_IF
  28.  
  29. HALT
  30.  
  31.  


Спасибо большое за помощь.
« Последнее редактирование: Январь 14, 2022, 01:58:43 am от Aleksey999 »

dramster

  • Герой форума
  • *****
  • Сообщений: 1131
    • Просмотр профиля
Re: IF_PICTURE_IN - Для новичков
« Ответ #92 : Январь 13, 2022, 10:32:29 pm »
Есть предположение, что из трех твоих вызовов подпрограмм находит только один цвет. Если это так, то нужно знать, что IF_PIXEL_IN может искать сразу множество цветов одновременно, и завершит поиск при первом совпадении в области:
Код: Clickermann
  1. GETSCREEN(2,807,345,1304)
  2. COLORMODE(6,2,807,345,1304)
  3. SCREENSHOTFIX(2,807,345,1304,"herb.bmp")
  4.  
  5. IF_PIXEL_IN(2,807,345,1304, 8355647, 4194175, 8388607)  //ищем сразу 3 цвета
  6.   KEYDOWN(#ctrl)
  7.   WAITMS(100)
  8.   LCLICK($_return1, $_return2)
  9.   WAITMS(100)
  10.   KEYUP(#ctrl)
  11.   WAITMS(200)
  12. END_IF
  13.  
  14. GETSCREEN(61,382,343,413)
  15. IF_PIXEL_IN(61,382, 343,413, 269907)
  16.   LCLICK($_return1, $_return2)
  17.   WAITMS(100)
  18. END_IF
  19.  
  20. HALT

Aleksey999

  • Зашел в гости
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: IF_PICTURE_IN - Для новичков
« Ответ #93 : Январь 13, 2022, 11:41:29 pm »
Есть предположение, что из трех твоих вызовов подпрограмм находит только один цвет. Если это так, то нужно знать, что IF_PIXEL_IN может искать сразу множество цветов одновременно, и завершит поиск при первом совпадении в области:
Код: Clickermann
  1. GETSCREEN(2,807,345,1304)
  2. COLORMODE(6,2,807,345,1304)
  3. SCREENSHOTFIX(2,807,345,1304,"herb.bmp")
  4.  
  5. IF_PIXEL_IN(2,807,345,1304, 8355647, 4194175, 8388607)  //ищем сразу 3 цвета
  6.   KEYDOWN(#ctrl)
  7.   WAITMS(100)
  8.   LCLICK($_return1, $_return2)
  9.   WAITMS(100)
  10.   KEYUP(#ctrl)
  11.   WAITMS(200)
  12. END_IF
  13.  
  14. GETSCREEN(61,382,343,413)
  15. IF_PIXEL_IN(61,382, 343,413, 269907)
  16.   LCLICK($_return1, $_return2)
  17.   WAITMS(100)
  18. END_IF
  19.  
  20. HALT

Задача найти в области каждый из указанных цветов и применить к каждому из них действие.
Варианты выше с этим справляются на ура.

А конкретно этот вариант будет применять действие только к одному из них.

wert19s

  • Освоившийся
  • **
  • Сообщений: 28
    • Просмотр профиля
Re: IF_PICTURE_IN - Для новичков
« Ответ #94 : Февраль 10, 2022, 01:45:51 am »
Добрый вечер,

Голову сломал:

GETSCREEN // Clickermann
COLORMODE(3)
IF_PICTURE_IN (20,150, $_xmax,$_ymax, "Y.bmp", -1, 80)
   BEEP(800,200)
     LOGWRITE ("BOMBA")
      DBLCLICK(493,99)
       WAIT(3)
   DBLCLICK(557,108)
ELSE // "ИНАЧЕ"
   BEEP(800,200)
   BEEP(800,200)
   BEEP(800,200)
   LOGWRITE ("О")
END_IF //
HALT

этот код не работает, когда не находит картинку то работает и пишет в лог О, а если находит то виснет кликер "не отвечает" закрываю его через диспечер.
и еще когда координаты оставляю :0,0 тоже виснет.
что может быть проблема?
спасибо

ребят помогите ....вернулся опять  к старой проблеме...смотрел видео читал  сообщения здесь но таки не понял...

Иван_Васильевич

  • Освоившийся
  • **
  • Сообщений: 51
    • Просмотр профиля
Re: IF_PICTURE_IN - Для новичков
« Ответ #95 : Февраль 10, 2022, 06:30:34 pm »
Добрый вечер,

Голову сломал:

GETSCREEN // Clickermann
COLORMODE(3)
IF_PICTURE_IN (20,150, $_xmax,$_ymax, "Y.bmp", -1, 80)
   BEEP(800,200)
     LOGWRITE ("BOMBA")
      DBLCLICK(493,99)
       WAIT(3)
   DBLCLICK(557,108)
ELSE // "ИНАЧЕ"
   BEEP(800,200)
   BEEP(800,200)
   BEEP(800,200)
   LOGWRITE ("О")
END_IF //
HALT

этот код не работает, когда не находит картинку то работает и пишет в лог О, а если находит то виснет кликер "не отвечает" закрываю его через диспечер.
и еще когда координаты оставляю :0,0 тоже виснет.
что может быть проблема?
спасибо

ребят помогите ....вернулся опять  к старой проблеме...смотрел видео читал  сообщения здесь но таки не понял...
вы ошибаетесь в  своих наблюдениях или код показали другой
так-как команда HALT даёт коду возможность только одноразового срабатывания и ни о каком зависании даже речи быть не может.

wert19s

  • Освоившийся
  • **
  • Сообщений: 28
    • Просмотр профиля
Re: IF_PICTURE_IN - Для новичков
« Ответ #96 : Февраль 10, 2022, 09:46:10 pm »
Добрый вечер,

Голову сломал:

GETSCREEN // Clickermann
COLORMODE(3)
IF_PICTURE_IN (20,150, $_xmax,$_ymax, "Y.bmp", -1, 80)
   BEEP(800,200)
     LOGWRITE ("BOMBA")
      DBLCLICK(493,99)
       WAIT(3)
   DBLCLICK(557,108)
ELSE // "ИНАЧЕ"
   BEEP(800,200)
   BEEP(800,200)
   BEEP(800,200)
   LOGWRITE ("О")
END_IF //
HALT

этот код не работает, когда не находит картинку то работает и пишет в лог О, а если находит то виснет кликер "не отвечает" закрываю его через диспечер.
и еще когда координаты оставляю :0,0 тоже виснет.
что может быть проблема?
спасибо

ребят помогите ....вернулся опять  к старой проблеме...смотрел видео читал  сообщения здесь но таки не понял...
вы ошибаетесь в  своих наблюдениях или код показали другой
так-как команда HALT даёт коду возможность только одноразового срабатывания и ни о каком зависании даже речи быть не может.
Поверьте виснет при первом нажатии....Я поборол это при первом использовани...недавно опять понадобилось поиск по картинке в том же проэкте...и опять я застрял ....

Иван_Васильевич

  • Освоившийся
  • **
  • Сообщений: 51
    • Просмотр профиля
Re: IF_PICTURE_IN - Для новичков
« Ответ #97 : Февраль 11, 2022, 04:53:17 am »
Добрый вечер,

Голову сломал:

GETSCREEN // Clickermann
COLORMODE(3)
IF_PICTURE_IN (20,150, $_xmax,$_ymax, "Y.bmp", -1, 80)
   BEEP(800,200)
     LOGWRITE ("BOMBA")
      DBLCLICK(493,99)
       WAIT(3)
   DBLCLICK(557,108)
ELSE // "ИНАЧЕ"
   BEEP(800,200)
   BEEP(800,200)
   BEEP(800,200)
   LOGWRITE ("О")
END_IF //
HALT

этот код не работает, когда не находит картинку то работает и пишет в лог О, а если находит то виснет кликер "не отвечает" закрываю его через диспечер.
и еще когда координаты оставляю :0,0 тоже виснет.
что может быть проблема?
спасибо

ребят помогите ....вернулся опять  к старой проблеме...смотрел видео читал  сообщения здесь но таки не понял...
вы ошибаетесь в  своих наблюдениях или код показали другой
так-как команда HALT даёт коду возможность только одноразового срабатывания и ни о каком зависании даже речи быть не может.
Поверьте виснет при первом нажатии....Я поборол это при первом использовани...недавно опять понадобилось поиск по картинке в том же проэкте...и опять я застрял ....
я проверил, хотя отлично знал, результат который получу, но пусть вам будет стыдно за ваше неуместное  требование проверки, вместо того, чтоб по простому, по человечески спросить о причине ваших собственных неудач.
 вот лог работы!
4:47:35 О
 как видите ни чего у нормальных-то пользователей ни где не виснет, а работает ожидаемо и после проверки скрипт, как и положено выключается, к вашему стыду! :-[

Иван_Васильевич

  • Освоившийся
  • **
  • Сообщений: 51
    • Просмотр профиля
Re: IF_PICTURE_IN - Для новичков
« Ответ #98 : Февраль 11, 2022, 05:09:41 am »
Добрый вечер,

Голову сломал:

GETSCREEN // Clickermann
COLORMODE(3)
IF_PICTURE_IN (20,150, $_xmax,$_ymax, "Y.bmp", -1, 80)
   BEEP(800,200)
     LOGWRITE ("BOMBA")
      DBLCLICK(493,99)
       WAIT(3)
   DBLCLICK(557,108)
ELSE // "ИНАЧЕ"
   BEEP(800,200)
   BEEP(800,200)
   BEEP(800,200)
   LOGWRITE ("О")
END_IF //
HALT

этот код не работает, когда не находит картинку то работает и пишет в лог О, а если находит то виснет кликер "не отвечает" закрываю его через диспечер.
и еще когда координаты оставляю :0,0 тоже виснет.
что может быть проблема?
спасибо

ребят помогите ....вернулся опять  к старой проблеме...смотрел видео читал  сообщения здесь но таки не понял...
вы ошибаетесь в  своих наблюдениях или код показали другой
так-как команда HALT даёт коду возможность только одноразового срабатывания и ни о каком зависании даже речи быть не может.
Поверьте виснет при первом нажатии....Я поборол это при первом использовани...недавно опять понадобилось поиск по картинке в том же проэкте...и опять я застрял ....
Если вам уже стало стыдно, за своё неадекватное поведение, то:
1. уменьшайте размер картинки для поиска
2. увеличивайте процент совпадения
3. ограничивайте область обновления графического буфера и область цветокоррекции область поиска картинки
4. точнее указывайте область поиска картинки
5. точнее подбирайте для сохранённого образца режим цветокоррекции и игнорирования фона, чтоб повысить процент совпадения.
 

wert19s

  • Освоившийся
  • **
  • Сообщений: 28
    • Просмотр профиля
Re: IF_PICTURE_IN - Для новичков
« Ответ #99 : Февраль 12, 2022, 10:49:47 pm »
Добрый вечер,

Голову сломал:

GETSCREEN // Clickermann
COLORMODE(3)
IF_PICTURE_IN (20,150, $_xmax,$_ymax, "Y.bmp", -1, 80)
   BEEP(800,200)
     LOGWRITE ("BOMBA")
      DBLCLICK(493,99)
       WAIT(3)
   DBLCLICK(557,108)
ELSE // "ИНАЧЕ"
   BEEP(800,200)
   BEEP(800,200)
   BEEP(800,200)
   LOGWRITE ("О")
END_IF //
HALT

этот код не работает, когда не находит картинку то работает и пишет в лог О, а если находит то виснет кликер "не отвечает" закрываю его через диспечер.
и еще когда координаты оставляю :0,0 тоже виснет.
что может быть проблема?
спасибо

ребят помогите ....вернулся опять  к старой проблеме...смотрел видео читал  сообщения здесь но таки не понял...
вы ошибаетесь в  своих наблюдениях или код показали другой
так-как команда HALT даёт коду возможность только одноразового срабатывания и ни о каком зависании даже речи быть не может.
Поверьте виснет при первом нажатии....Я поборол это при первом использовани...недавно опять понадобилось поиск по картинке в том же проэкте...и опять я застрял ....
Добрый вечер
 Если вам уже стало стыдно, за своё неадекватное поведение, то:
1. уменьшайте размер картинки для поиска
например мне нужна область 500х200 и на 1200 на 400 квадрат...я делаю скрин этого участка с цветокорекцией 4-5-6 ....перепробовал все 3///
2. увеличивайте процент совпадения
максимально 100 минимально 0....экспререминтировал от 0 до 100
3. ограничивайте область обновления графического буфера и область цветокоррекции область поиска картинки
сдесь можна подробней?
4. точнее указывайте область поиска картинки
как указывать точнее? указываю ту же область когда беру скрин до вырезания картинки размером 30х30...
5. точнее подбирайте для сохранённого образца режим цветокоррекции и игнорирования фона, чтоб повысить процент совпадения.
цветокорекция ? выставляю так же как когда делаю скрин....а вот насчет фона можна подробнее?
заранее спасибо

Hito

  • Герой форума
  • *****
  • Сообщений: 1174
    • Просмотр профиля
Re: IF_PICTURE_IN - Для новичков
« Ответ #100 : Февраль 19, 2022, 04:39:10 pm »
1. уменьшайте размер картинки для поиска
2. увеличивайте процент совпадения
3. ограничивайте область обновления графического буфера и область цветокоррекции область поиска картинки
4. точнее указывайте область поиска картинки
5. точнее подбирайте для сохранённого образца режим цветокоррекции и игнорирования фона, чтоб повысить процент совпадения.

  На сколько я понимаю, вот это все тут ни при чем. Ведь человек сказал, что если у него НЕ находит картинку, то скрипт не зависает и в лог благополучно прописывается "О". Но для того, чтобы картинку НЕ найти, скрипту нужно поискать ее по всему экрану (в пределах заданных координат) и с заданными параметрами, а значит, что с размером экрана и условиями самого поиска процессор компа все же справляется, если в итоге он все же переходит в раздел ELSE. Ну, это чисто логика и терять ее в нашем деле нельзя...
  Мое мнение - человек что-то путает, так как я не вижу в скрипте проблемных мест. Либо я очень невнимателен - что вполне возможно. В любом случае у меня тоже часто возникают моменты, в которых вроде бы ВСЁ перепроверишь 50 раз, а оно всё равно не работает и тогда меня удивляет одна вещь на форуме - почему так боимся пользоваться логом? Да - ты прописал некие отмашки в лог в обоих направлениях, в которых может идти скрипт, но если сложилась такая ситуация, как у тебя, то не считаешь ли ты, что этих отметок мало и что тебе пора выяснить конкретно - на какой строке у тебя возникает трабл? Я понимаю - скрипт был бы в 3.000 строк... И то можно было бы сделать то же самое в проблемном месте скрипта.

Код: Clickermann
  1. GETSCREEN // Clickermann
  2. COLORMODE(3)
  3. IF_PICTURE_IN (20,150, $_xmax,$_ymax, "Y.bmp", -1, 80)
  4.   LOGWRITE ("Картинка найдена в координатах: ",$_return1,",",$_return2)
  5.   BEEP(800,200)
  6.   LOGWRITE ("BOMBA")
  7.   DBLCLICK(493,99)
  8.   LOGWRITE ("Ждемс три сек")
  9.   WAIT(3)
  10.   LOGWRITE ("Двойной клик")
  11.   DBLCLICK(557,108)
  12.   LOGWRITE ("Условие с найденной картинкой закончено")
  13. ELSE // "ИНАЧЕ"
  14.   LOGWRITE ("Картинка не найдена")
  15.   BEEP(800,200)
  16.   LOGWRITE ("BEEP")
  17.   BEEP(800,200)
  18.   LOGWRITE ("BEEP")
  19.   BEEP(800,200)
  20.   LOGWRITE ("О")
  21. END_IF //
  22. HALT

Запускаем скрипт и лог в студию.
« Последнее редактирование: Февраль 19, 2022, 05:20:50 pm от Hito »
Я не ду... Потому и не бу...

Oblie1968

  • Освоившийся
  • **
  • Сообщений: 27
    • Просмотр профиля
Re: IF_PICTURE_IN - Для новичков
« Ответ #101 : Февраль 21, 2022, 02:03:27 pm »
не считаешь ли ты, что этих отметок мало и что тебе пора выяснить конкретно - на какой строке у тебя возникает трабл? Я понимаю - скрипт был бы в 3.000 строк... И то можно было бы сделать то же самое в проблемном месте скрипта.
Другой вариант, закомментить все строки в проблемном месте и по одной вводить в строй.
Проблема в одном из DBLCLICK, больше просто негде, надо ему смотреть, чего он там кликает.
« Последнее редактирование: Февраль 21, 2022, 02:07:43 pm от Oblie1968 »