Что нового

Ошибка в поиске пикселя

MCR

Новичок
Сообщения
22
Репутация
0
Ищу пиксель рядом с которым на определенном расстоянии от него должен находиться другой пиксель с определенным цветом. Но скрипт не работает, пишет MsgBox(1,"", "konec"), а результата не возвращает, самостоятельно найти ошибку не получается. Помогите кто чем может :'(

Вообще хотелось сделать скрипт который искал первый пиксель
Код:
$search_point1=PixelSearch($left_search, $top_search, 1160, 705, $point1, 10)


проверял 2ой пиксель на наличие необходимого цвета (расстояние между пикселями знаем)
Код:
$search_point2=PixelGetColor($search_point1[0]+($pix_X2-$pix_X1), $search_point1[1]+($pix_Y2-$pix_Y1))


если 2ой пиксель не искомого цвета, то перезадается область поиска
Код:
$search_point1=PixelSearch($left_search, $top_search, $left_search, 705, $point1, 10); продолжает искать в столбце пикселей на 1 пиксель ниже




Вот скрипт полностью:



Код:
#Include <Misc.au3>
#include <Array.au3>
HotKeySet ( "{ESC}" ,"_Exit")

While 1

    If _IsPressed(71) Then ;~ Запуск по нажатию F2

MsgBox(1,"", "nachalo")
		$pix_X1=625
		$pix_Y1=395
		$pix_X2=685
		$pix_Y2=350

		$point1=PixelGetColor($pix_X1, $pix_Y1)
		$point2=PixelGetColor($pix_X2, $pix_Y2)

		$left_search=375
		$top_search=135

 Local $search_point1, $search_point2
 MsgBox(1,"", "nachalo poiska")

		_Poisk_2_pix($search_point1)

		MsgBox(1,"", "konec")

    EndIf

Wend

 Func _Poisk_2_pix($search_point1)

		While $left_search<>1159
		$top_search=135
		$search_point1=PixelSearch($left_search, $top_search, 1160, 705, $point1, 10)
		;_ArrayDisplay($search_point1)




			If @error Then
				MsgBox(1,"", "net pix")

			Else
				$search_point2=PixelGetColor($search_point1[0]+($pix_X2-$pix_X1), $search_point1[1]+($pix_Y2-$pix_Y1))
				;MsgBox(1,"", $search_point2)
				Select
					Case $search_point2=$point2
						
						MsgBox(1,"", $search_point1[0])
                                                 Return $search_point1

					Case $search_point2<>$point2
						$top_search=$top_search+1
						Do
						$search_point1=PixelSearch($left_search, $top_search, $left_search, 705, $point1, 10); продолжает искать в столбце пикселей на 1 пиксель ниже
							If Not @error Then

								$search_point2=PixelGetColor($search_point1[0]+($pix_X2-$pix_X1), $search_point1[1]+($pix_Y2-$pix_Y1))
								If $search_point2=$point2 Then
									
									MsgBox(1,"", $search_point1[0])
                                                                        Return $search_point1
								Else
								$top_search=$top_search+1 ;если пиксель найден и $search_point2<>point2
							EndIf
						Else
							$search_point1=1 ;если пиксель не найден
						EndIf

					Until $top_search=704 Or $search_point1=1

					$left_search=$left_search+1

				EndSelect
			EndIf



			WEnd
		EndFunc


Func _Exit()
	Exit
    EndFunc
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
У вас выход из функции раньше вывода сообщения. Поменяйте местами строки
Код:
Return $search_point1
MsgBox(1,"", $search_point1[0])
 
Автор
M

MCR

Новичок
Сообщения
22
Репутация
0
Спасибо ;D он что-то выдал, сейчас проверю то или нет.
 
Автор
M

MCR

Новичок
Сообщения
22
Репутация
0
Потому что сначала я его запоминаю, а потом положение пикселей меняется, надо найти координаты пикселя снова. Скрипт работает, но к сожалению очень долго , есть ли варианты сделать то же самое но быстрее?

Что-то где то было про быстрый поиск пикселей с помощью скриншота и битмэпа, тему найти не могу. Поможет ли это?
 
Автор
M

MCR

Новичок
Сообщения
22
Репутация
0
в этом скрипте была и есть еще одна ошибка, кто найдет?
:D
 
Верх