Author Topic: Поиск ближайшего к центру области пикселя определённого цвета  (Read 1974 times)

0 Members and 1 Guest are viewing this topic.

Terri

  • Зашел в гости
  • *
  • Posts: 3
    • View Profile
Здравствуйте! У меня такая проблема:
Нужно найти в области 0,0,1000,1000 все пиксели цвета скажем 777. А потом выбрать среди них ближайший к точке 500,500 и кликнуть на него. Как это можно сделать? Заранее огромное спасибо!
« Last Edit: February 07, 2017, 11:52:34 AM by Terri »

Terri

  • Зашел в гости
  • *
  • Posts: 3
    • View Profile
1.вы ищите один пиксель, а не все пиксели данного цвета, так из чего-же вы собрались выбирать?
2. Если нужно кликнуть на пиксель ближайший к 500, 500 - то зачем вообще поиск в таком большом секторе?
3. сделать это можно, например с помощью сортировки полученных массивов или расширением области поиска, но ваша задача явно взята с потолка или описание не соответствует практической цели.
1. Я ошибся, искать нужно действительно все пиксели.
2. Данные для примера, сектор действительно будет поменьше. А ситуация может быть такая, что найдётся лишь один нужный пиксель и будет ближе к рамке.
3. Задача не с потолка) С потолка цифры, реальные цифры: окно 20,103,1331,533 а цвет 806482.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Область обязательно задавать.
И если пикселов заданного цвета много - уменьшать область иначе до пенсии будем ждать.

Code: (clickermann) [Select]
#name "Ближайший к заданным координатам пиксель"

// цель
$Xtarget = 500
$Ytarget = 500

GETSCREEN(0,0,1000,1000)
SCANPXL($scan, 0,0,1000,1000, 777)

$dist = 10000
$scan_size = ARRSIZE($scan)
FOR($i=0, $i < $scan_size, 2)
    $X = $scan[$i]
    $Y = $scan[$i+1]
    $d_temp = DIST($Xtarget, $Ytarget, $X, $Y)
    IF($d_temp < $dist)
        $dist = $d_temp
        $Xdot_target = $X
        $Ydot_target = $Y
    END_IF
    IF($Y > $Ytarget + $dist)
       $i = $scan_size
    END_IF
   
END_CYC
UNDEFINE($scan)

IF($dist ! 10000)
    LOGWRITE ("Ближайший пиксель к заданным координатам X/Y: ", $Xdot_target, " / ", $Ydot_target)
ELSE
    LOGWRITE ("Заданный цвет не найден")
END_IF

HALT


Terri

  • Зашел в гости
  • *
  • Posts: 3
    • View Profile
Жду как оказалось четверть секунды, Огромное спасибо!! ;)

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
похожая задачка (кстати так и не решенная  :( ), может чем поможет автору данной темы  ;)
http://crapware.aidf.org/forum/index.php?topic=2569.msg16133#msg16133