пришла сегодня в голову такая идейка. ведь как работает обычный ифпикчуреин - ищет первый пиксель, потом сравнивает второй, если совпадает то далее, если нет то с начала, ну короче все кому интересно примерно понимают. это дает возможность использовать процент совпадения (и игнорируемый цвет). но если процент совпадения 100%, то зачем столько лишних действий?
принцип мысли - ищем первый пиксель искомой картинки и проверяем ранее проверенный PXLXOR этой картинки, если нет, то далее со следующим найденным первым пикселем.
идея пришла, время и техники для тестов нет. вот, на своем калькуляторе испытал, результаты неплохие. если кому интересно, мог бы норм потестить, усовершенствовать и в либу всунуть.
разрешение искомой области 1366 х 768. на вин10 сложновато с его вездесущим сглаживанием.
где ищем:
что ищем (100х100 !!!):
как ищем:
GETSCREEN
// 3497629 цвет первого пикселя
SCANPXL($ARR, 0,0, $_xmax,$_ymax, 3497629)
print(ARRSIZE($ARR)/2, " возможных координат")
$t = $_ms
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "1.bmp", -1, 100)
print("нашли по старинке в координатах ",$_return1," х ", $_return2)
END_IF
print("за ",$_ms - $t, " ms.")
print(" ")
waitms(500)
$t = $_ms
$size = ARRSIZE($ARR)
FOR($i=0,$i<$size,2)
IF(PXLXOR($ARR[$i],$ARR[$i+1],$ARR[$i]+100,$ARR[$i+1]+100) = 16584102) //16584102 - ранее подсчитаная контр сумма
print("нашли по новинке в координатах ",$ARR[$i]," х ", $ARR[$i+1])
$i=$size
END_IF
END_CYC
print("за ",$_ms - $t, " ms.")
print(" ")
halt
результат:
22:49:10 2 возможных координат
22:49:13 нашли по старинке в координатах 640 х 352
22:49:13 за 4251 ms.
22:49:13
22:49:14 нашли по новинке в координатах 640 х 352
22:49:14 за 23 ms.
22:49:14
в 180 раз быстрее!!!естественно, что скорость будет зависеть от количества "первых пикселей" в искомой области.