Author Topic: Цвета пикселей  (Read 2996 times)

0 Members and 1 Guest are viewing this topic.

sibas

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Цвета пикселей
« on: March 22, 2015, 07:27:44 AM »
Как записать в .ini файл все цвета находящиеся в прямоугольной области экрана?
А то PXL записывает цвет только одного пикселя
Quote
$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

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Цвета пикселей
« Reply #1 on: March 22, 2015, 08:20:33 AM »
Когда указываешь область GETSCREEN вторые два числа должны быть хотя бы на 1 пиксел больше области анализа.
GETSCREEN(0,0,0,0) - 0 пикселов войдет в снимок
GETSCREEN(0,0,1,1) - 1 пиксел войдет в снимок
Область в GETSCREEN указывается только в том случае если нужно уменьшить нагрузку на процессор и ускорить работу кликера когда он выполняет скрипт практически без задержек. Если торопиться не куда то область лучше не указывать, функция будет делать снимок всего экрана.

Есть две функции для суммирования цветов

Старая PXLXOR, просто складывает все цвета в зоне в некое число. Плюсы, быстро работает. Минусы, неточная (например белый квадрат с черной точкой, куда бы эта точка не переместилась в этом квадрате функция будет выдавать одно и тоже, потому что она просто складывает цвета без учета их положения).
Code: (clickermann) [Select]
PXLXOR(10,10, 100,100)
Более новая PXLCRC, создает хеш сумму цветов в области. Плюсы, точная. Минусы, работает чуть медленнее PXLXOR
Code: (clickermann) [Select]
PXLCRC(10,10, 100,100)
Пример
Code: (clickermann) [Select]
$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

sibas

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Re: Цвета пикселей
« Reply #2 on: March 22, 2015, 10:18:03 AM »
На счет области getscreen я в курсе приводил пример и поэтому везде нули написал, не думал что вы этому предадите значение. Про pxlxor и pxlcrc читал, но думаю что это не то так как там какие то суммы цветов в некое число, а мне нужен просто список номеров цветов каждого пикселя в прямоугольной области, например в области от 0,0 до 5,5 почти все разного цвета пиксели (например картинка там какая нибудь) и мне нужен список из 25 номеров цветов а не их сумма.
1. 35732169
2. 865316853
3. 255.... и тд
и желательно без повторений. Кстати интересно, а if_pixel_in если я укажу много цветов будет со всеми цветами сравнивать  или как только первый совпадет то дальше уже прервет поиск?
« Last Edit: March 22, 2015, 10:20:44 AM by sibas »

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Цвета пикселей
« Reply #3 on: March 22, 2015, 11:48:30 AM »
можно вот так:

Code: (clickermann) [Select]
$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



Quote
Кстати интересно, а if_pixel_in если я укажу много цветов будет со всеми цветами сравнивать  или как только первый совпадет то дальше уже прервет поиск?
из справки км: "Как только первый попавшийся пиксель будет найден, инструкция вернет его координаты в переменные $_return1, $_return2 и прекратит анализ"
« Last Edit: March 22, 2015, 11:55:23 AM by dramster »