Что нового

Как работает PixelSearch

Phantom

Новичок
Сообщения
13
Репутация
0
Функция PixelSearch ищет до первого найденого пиксела или создаёт массив со всеми найдеными в зоне пикселами, или ещет все пиксели по порядку?
 
Автор
P

Phantom

Новичок
Сообщения
13
Репутация
0
Допустим нашли какой то пиксел, но он не уникален и не устраивает меня по каким то причинам, поиск продолжится или прервется?
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
Поиск прирвётся при нахождении первого пикселя или при достижении конца области.
Только после этого вы сможете проверить его на уникальность.
И дальше всё будет зависить от логики вашего кода. Если создадите цикл, то сможете продолжить дальше.
Помнится была уже тема, когда создавали код, который ищет все пиксели с заданым цветом и помещает их координаты в массив. После этого уже можно будет работать с массивом. Попробуйте воспользоваться поиском по форуму.
 
Автор
P

Phantom

Новичок
Сообщения
13
Репутация
0
Тогда как продолжить поиск PixelSearch после найденного ненужного пиксела? Например в такой конструкции
Код:
$color = PixelSearch (1, 1, 100, 100, 0x000000, 0, 1)
if not @error Then
    if PixelGetColor($color[0]+1, $color[1]) = 0xffffff Then
	MsgBox (0, '', $color[0]&','&$color[1])
	EndIf
EndIf
нужно найти только последовательность черный-белый и проигнорировать другие комбинации черного.
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
Создал картинку с одним чёрным пикселем на белом фоне. У меня она открывается в программе XnView
Код получился такой
Код:
Opt("PixelCoordMode", 2)            ;1=абсолютные, 0=относительные, 2=клиентские

$hWnd = WinGetHandle('XnView')
$aSize = WinGetClientSize($hWnd)

For $y = 1 To $aSize[1]
	For $x = 1 To $aSize[0]
		$color = PixelSearch($x, $y, $aSize[0], $y, 0x000000, 0, 1, $hWnd)
		if not @error Then
			if PixelGetColor($color[0]+1, $color[1], $hWnd) = 0xffffff Then
				MsgBox (0, '', $color[0] & ',' & $color[1])
				Exit
			Else
				If $x >= $aSize[0] Then 
					ExitLoop
				Else 
					$x = $color[0] + 1
				EndIf
			EndIf
		EndIf
	Next
Next
Сразу скажу, что он далеко не оптимальный, так как этот пиксель ищет долго. Но тем не менее находит.
Может кто сможет подсказать что-нибудь получше и побыстрее. Но думаю это будет не PixelSearch
 

Prog

Продвинутый
Сообщения
592
Репутация
72
Можете попробовать мою библиотеку. http://autoit-script.ru/index.php?topic=19590.0
Загрузите картинку в буфер и работайте с ним. Должно быть быстрее. Но скорее всего скорость будет ограничивать AutoIt-код, выполняемый в цикле.
 

InnI

AutoIT Гуру
Сообщения
4,950
Репутация
1,445
Phantom
найти только последовательность черный-белый
Посмотрите этот пример: Ответ #2. Производится поиск массива опорных пикселей, рядом с каждым из которых проверяются уточняющие.
 
Верх