Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: sibas on March 22, 2015, 07:27:44 AM
-
Как записать в .ini файл все цвета находящиеся в прямоугольной области экрана?
А то PXL записывает цвет только одного пикселя
$col_l = INIREAD("conf_mg2.ini", "col_l")
IF($col_a="")
$mr = dialogbox("Цвета записаны", 1)
IF($mr = 2)
halt
END_IF
GETSCREEN(0,0,0,0)
$col_l=PXL(0,0)
INIWRITE("conf_mg2.ini", "col_l", $col_l)
END_IF
-
Когда указываешь область GETSCREEN вторые два числа должны быть хотя бы на 1 пиксел больше области анализа.
GETSCREEN(0,0,0,0) - 0 пикселов войдет в снимок
GETSCREEN(0,0,1,1) - 1 пиксел войдет в снимок
Область в GETSCREEN указывается только в том случае если нужно уменьшить нагрузку на процессор и ускорить работу кликера когда он выполняет скрипт практически без задержек. Если торопиться не куда то область лучше не указывать, функция будет делать снимок всего экрана.
Есть две функции для суммирования цветов
Старая PXLXOR, просто складывает все цвета в зоне в некое число. Плюсы, быстро работает. Минусы, неточная (например белый квадрат с черной точкой, куда бы эта точка не переместилась в этом квадрате функция будет выдавать одно и тоже, потому что она просто складывает цвета без учета их положения).
PXLXOR(10,10, 100,100)
Более новая PXLCRC, создает хеш сумму цветов в области. Плюсы, точная. Минусы, работает чуть медленнее PXLXOR
PXLCRC(10,10, 100,100)
Пример
$col_l = INIREAD("conf_mg2.ini", "col_l")
IF($col_a="")
$mr = dialogbox("Цвета записаны", 1)
IF($mr = 2)
halt
END_IF
GETSCREEN
$col_l=PXLCRC(10,10, 100,100)
INIWRITE("conf_mg2.ini", "col_l", $col_l)
END_IF
-
На счет области getscreen я в курсе приводил пример и поэтому везде нули написал, не думал что вы этому предадите значение. Про pxlxor и pxlcrc читал, но думаю что это не то так как там какие то суммы цветов в некое число, а мне нужен просто список номеров цветов каждого пикселя в прямоугольной области, например в области от 0,0 до 5,5 почти все разного цвета пиксели (например картинка там какая нибудь) и мне нужен список из 25 номеров цветов а не их сумма.
1. 35732169
2. 865316853
3. 255.... и тд
и желательно без повторений. Кстати интересно, а if_pixel_in если я укажу много цветов будет со всеми цветами сравнивать или как только первый совпадет то дальше уже прервет поиск?
-
можно вот так:
$x1= 800
$y1= 600
$x2= 805
$y2= 605
GETSCREEN($x1,$y1,$x2,$y2)
FOR($y=$y1,$y<$y2)
FOR($x=$x1,$x<$x2)
$pix_col = PXL($x,$y)
inc($n)
print("пиксель №",$n," = ",$pix_col)
//здесь можеш записыватьть это значение хоть куда - в тхт, ини, массив. например в ини будет так:
INIWRITE("colors.ini", $n, $pix_col)
GETSCREEN($x1,$y1,$x2,$y2)
END_CYC
END_CYC
halt
Кстати интересно, а if_pixel_in если я укажу много цветов будет со всеми цветами сравнивать или как только первый совпадет то дальше уже прервет поиск?
из справки км: "Как только первый попавшийся пиксель будет найден, инструкция вернет его координаты в переменные $_return1, $_return2 и прекратит анализ"