Author Topic: Найти совпадения  (Read 1501 times)

0 Members and 1 Guest are viewing this topic.

RaMzz

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Найти совпадения
« on: January 06, 2015, 02:26:19 AM »
Вообщем делаю скриншот  хочу чтоб нашел совпадения на экране "в этой области таже картинка  либо  нет" ,  но происходит что какие бы небыли картинки он всегда  возвращает совпадения
Code: (clickermann) [Select]
//Коментарии  первый раз пытаюсь  понять  что  к чему
GETSCREEN // сделали скриншот экрана 


SCREENSHOTEX(466,424, 478,455, "Image_", 0)//из скриншота область картинки сохранили в файл первый файл получился Image_0000.bmp

IF_PICTURE_IN (466,424, 478,455, "screens\image_0000.bmp",-1, 80)//тут мы получается сравниваем прямоугольную область буфера с изображением
 move($_return1, $_return2) //почему ретурны всегда возвращают 466424 координаты, даже если на экране уже совершено другое, как я понял они должны возвращать координаты только в случае успешного совпадения буфера на данный момент с изображением Image_0000.bmp??
END_IF

print($_return1, $_return2)

HALT
>:(
почему ретурны всегда возвращают 466424 координаты, даже если на экране уже совершено другое, как я понял они должны возвращать координаты только в случае успешного совпадения буфера на данный момент с изображением Image_0000.bmp??
« Last Edit: January 06, 2015, 02:30:12 AM by RaMzz »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Найти совпадения
« Reply #1 on: January 06, 2015, 08:35:56 AM »
Не очень понятно зачем тебе это нужно. После SCREENSHOTEX лучше написать задержку, потому что сохранение файла дело не быстрое.
Ты написал print($_return1, $_return2) за условием поиска, и в чем твое удивление? Системные переменные $_return1, $_return2 небыли затронуты и значение в них осталось прежним. Более того, значения в них не обнуляются даже при остановке сценария. Они служат лишь для вывода значений, не стоит пытаться в них что то записать и обнулить. Их пишут только внутри условий.
Картинку, кстати, нужно потом удалять. Такой скрипт оправдан если ты делаешь скриншот в одной области а ищешь в другой или большей области.

Code: (clickermann) [Select]
GETSCREEN
SCREENSHOTEX(466,424, 478,455, "Image_", 0)

WAITMS(100)

IF_PICTURE_IN (466,424, 478,455, "screens\image_0000.bmp",-1, 80)
   move($_return1, $_return2)
   print($_return1, $_return2)
END_IF

TFCLEAR("screens\image_0000.bmp", 1) // удаляем картинку

HALT

В твоем случае можно использовать PXLCRC для получения хеш суммы области и сравнивания её в дальнейшем.
Code: (clickermann) [Select]
GETSCREEN
$hash1 = PXLCRC(466,424, 478,455) // снимаем хеш 1
WAITMS(500)

$hash2 = PXLCRC(466,424, 478,455) // через некоторое время снимаем хеш 2
IF($hash1 = $hash2) // сравниваем
   HINTPOPUP("Совпадентие!")
   HALT // стоп
END_IF

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Найти совпадения
« Reply #2 on: January 06, 2015, 02:55:04 PM »
Принт внутрь условия это да. Но и внутри, в твоём случае будет всегда выдавать что нашло там же. Ты так составил свой пример. Сделал снимок, потом скриншот и сразу же на этом снимке ищешь то что взял С НЕГО ЖЕ. Естественно будет находить всегда даже при 100%.