Что нового

Определениче числа по пикселям RF Online

anonymous7

Знающий
Сообщения
40
Репутация
8
Помогите оптимизировать скрипт для определения числа по пикселям. В данный момент скрипт работает, но дольше чем нужно.
Хотелось бы рассмотреть предложения по оптимизации или ещё лучше - оптимизировать.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 591
Репутация
938
Re: Определениче числа по пикселям

описание алгоритма, на базе чего делалось и тд и тп, многие например могут что-то посоветовать, но им лень качать вложение.
 

edward_freedom

Осваивающий
Сообщения
200
Репутация
44
Re: Определениче числа по пикселям

Я скачал, нече не понял что требуеться от скрипта :scratch:
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
Re: Определениче числа по пикселям

600 строк pixelsearch...
Куча координат... я так понял в этих координатах находятся цифры. Вот только одно но. У меня в этой области нет цифр... Хоть бы привел картинку с нужными цифрами...

+ у тебя идет так.
10 кусков кода ищут в 1-й области 1-ю цифру... потом следующие 10 ищут 2-ю...
Если сделаешь изменяемые координаты, т.е. общее смещение вправо на N-пикселей, то код будет не 600 строк, а 150... воспринимать и изменять его будет в 4 раза удобнее... :smile:

P.S. Наверняка нужные цифры можно вытащить более простым и надежным способом? Где хоть цифры находятся? :smile:
 
Автор
A

anonymous7

Знающий
Сообщения
40
Репутация
8
Re: Определениче числа по пикселям

Извиняюсь за малоинформативный первый пост. Вот добавляю картинку и код:
Код:
Func _CoordX()
Dim $X1 = 938
Dim $X2 = 945
Dim $x = 0
Dim $number1 = 0
Dim $number2 = 0
	;----------------- $number2 -----------------
	;-------------------- 1 ---------------------
	
	$x = $X1
	;Local $x = 945
	$x = $x + 3 ; $x = 948
	PixelSearch($x,173,$x,173,0xFFFFFF)
	If Not @error Then
		PixelSearch($x,174,$x,174,0xFFFFFF)
		If Not @error Then
			PixelSearch($x,176,$x,176,0xFFFFFF)
			If Not @error Then
				PixelSearch($x,177,$x,177,0xFFFFFF)
				If Not @error Then
					$number1 = 1
					;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
				EndIf
				
			EndIf
		EndIf
	EndIf
	;-------------------- 2 ---------------------
	$x = $X1 + 1
	PixelSearch($x,172,$x,172,0xFFFFFF)
	If Not @error Then
		PixelSearch($x,173,$x,173,0xFFFFFF)
		If @error Then
			$x = $x + 4 ; $x = 950
			PixelSearch($x,177,$x,177,0xFFFFFF)
			If @error Then
				PixelSearch($x,178,$x,178,0xFFFFFF)
				If Not @error Then
					$number1 = 2
					;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
				EndIf
				
			EndIf
		EndIf
	EndIf
	;-------------------- 3 ---------------------
	$x = $X1 + 5
	PixelSearch($x,175,$x,175,0xFFFFFF)
	If @error Then
		$x = $x - 4 ; $x = 946
		PixelSearch($x,172,$x,172,0xFFFFFF)
		If Not @error Then
			PixelSearch($x,178,$x,178,0xFFFFFF)
			If Not @error Then
				$number1 = 3
				;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
			EndIf
		EndIf
	EndIf
	;-------------------- 4 ---------------------
	$x = $X1 + 4
	PixelSearch($x,173,$x,173,0xFFFFFF)
	If Not @error Then
		$x = $x - 1 ; $x = 948
		PixelSearch($x,178,$x,178,0xFFFFFF)
		If @error Then
			$number1 = 4
		EndIf
		;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
	EndIf
	;-------------------- 5 ---------------------
	$x = $X1 + 5
	PixelSearch($x,173,$x,173,0xFFFFFF)
	If @error Then
		$x = $x - 4 ; $x = 946
		PixelSearch($x,177,$x,177,0xFFFFFF)
		If @error Then
			$x = $x + 2 ; $x = 948
			PixelSearch($x,173,$x,173,0xFFFFFF)
			If @error Then
				PixelSearch($x,175,$x,175,0xFFFFFF)
				If Not @error Then
					$x = $x + 1 ; $x = 949
					PixelSearch($x,173,$x,173,0xFFFFFF)
					If @error Then
						$number1 = 5
					EndIf
					;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
				EndIf
			EndIf
		EndIf
	EndIf
	;-------------------- 6 ---------------------
	$x = $X1 + 5
	PixelSearch($x,173,$x,173,0xFFFFFF)
	If @error Then
		$x = $x - 4 ; $x = 946
		PixelSearch($x,177,$x,177,0xFFFFFF)
		If Not @error Then
			$number1 = 6
			;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
		EndIf
	EndIf
	;-------------------- 7 ---------------------
	$x = $X1 + 1
	PixelSearch($x,173,$x,173,0xFFFFFF)
	If @error Then
		PixelSearch($x,177,$x,177,0xFFFFFF)
		If @error Then
			$x = $x + 4 ; $x = 950
			PixelSearch($x,175,$x,175,0xFFFFFF)
			If Not @error Then
				$x = $x - 2 ; $x = 948
				PixelSearch($x,175,$x,175,0xFFFFFF)
				If @error Then
					$number1 = 7
					;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
				EndIf
			EndIf
		EndIf
	EndIf
	;-------------------- 8 ---------------------
	$x = $X1 + 1
	PixelSearch($x,175,$x,175,0xFFFFFF)
	If @error Then
		$x = $x + 4 ; $x = 950
		PixelSearch($x,175,$x,175,0xFFFFFF)
		If @error Then
			$x = $x - 2 ; $x = 948
			PixelSearch($x,173,$x,173,0xFFFFFF)
			If @error Then
				$x = $x - 2 ; $x = 946
				PixelSearch($x,177,$x,177,0xFFFFFF)
				If Not @error Then
					$number1 = 8
					;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
				EndIf
			EndIf
		EndIf
	EndIf
	;-------------------- 9 ---------------------
	$x = $X1 + 1
	PixelSearch($x,173,$x,173,0xFFFFFF)
	If Not @error Then
		PixelSearch($x,177,$x,177,0xFFFFFF)
		If @error Then
			$x = $x + 4 ; $x = 950
			PixelSearch($x,173,$x,173,0xFFFFFF)
			If Not @error Then
				PixelSearch($x,177,$x,177,0xFFFFFF)
				If Not @error Then
					$number1 = 9
					;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
				EndIf
			EndIf
		EndIf
	EndIf
	;----------------- $number2 -----------------
	;-------------------- 1 ---------------------
	$x = $X2 + 3 ; $x = 948
	PixelSearch($x,173,$x,173,0xFFFFFF)
	If Not @error Then
		PixelSearch($x,174,$x,174,0xFFFFFF)
		If Not @error Then
			PixelSearch($x,176,$x,176,0xFFFFFF)
			If Not @error Then
				PixelSearch($x,177,$x,177,0xFFFFFF)
				If Not @error Then
					$number2 = 1
					;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
				EndIf
				
			EndIf
		EndIf
	EndIf
	;-------------------- 2 ---------------------
	$x = $X2 + 1
	PixelSearch($x,172,$x,172,0xFFFFFF)
	If Not @error Then
		PixelSearch($x,173,$x,173,0xFFFFFF)
		If @error Then
			$x = $x + 4 ; $x = 950
			PixelSearch($x,177,$x,177,0xFFFFFF)
			If @error Then
				PixelSearch($x,178,$x,178,0xFFFFFF)
				If Not @error Then
					$number2 = 2
					;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
				EndIf
				
			EndIf
		EndIf
	EndIf
	;-------------------- 3 ---------------------
	$x = $X2 + 5
	PixelSearch($x,175,$x,175,0xFFFFFF)
	If @error Then
		$x = $x - 4 ; $x = 946
		PixelSearch($x,172,$x,172,0xFFFFFF)
		If Not @error Then
			PixelSearch($x,178,$x,178,0xFFFFFF)
			If Not @error Then
				$number2 = 3
				;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
			EndIf
		EndIf
	EndIf
	;-------------------- 4 ---------------------
	$x = $X2 + 4
	PixelSearch($x,173,$x,173,0xFFFFFF)
	If Not @error Then
		$x = $x - 1 ; $x = 948
		PixelSearch($x,178,$x,178,0xFFFFFF)
		If @error Then
			$number2 = 4
		EndIf
		;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
	EndIf
	;-------------------- 5 ---------------------
	$x = $X2 + 5
	PixelSearch($x,173,$x,173,0xFFFFFF)
	If @error Then
		$x = $x - 4 ; $x = 946
		PixelSearch($x,177,$x,177,0xFFFFFF)
		If @error Then
			$x = $x + 2 ; $x = 948
			PixelSearch($x,173,$x,173,0xFFFFFF)
			If @error Then
				PixelSearch($x,175,$x,175,0xFFFFFF)
				If Not @error Then
					$x = $x + 1 ; $x = 949
					PixelSearch($x,173,$x,173,0xFFFFFF)
					If @error Then
						$number2 = 5
					EndIf
					;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
				EndIf
			EndIf
		EndIf
	EndIf
	;-------------------- 6 ---------------------
	$x = $X2 + 5
	PixelSearch($x,173,$x,173,0xFFFFFF)
	If @error Then
		$x = $x - 4 ; $x = 946
		PixelSearch($x,177,$x,177,0xFFFFFF)
		If Not @error Then
			$number2 = 6
			;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
		EndIf
	EndIf
	;-------------------- 7 ---------------------
	$x = $X2 + 1
	PixelSearch($x,173,$x,173,0xFFFFFF)
	If @error Then
		PixelSearch($x,177,$x,177,0xFFFFFF)
		If @error Then
			$x = $x + 4 ; $x = 950
			PixelSearch($x,175,$x,175,0xFFFFFF)
			If Not @error Then
				$x = $x - 2 ; $x = 948
				PixelSearch($x,175,$x,175,0xFFFFFF)
				If @error Then
					$number2 = 7
					;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
				EndIf
			EndIf
		EndIf
	EndIf
	;-------------------- 8 ---------------------
	$x = $X2 + 1
	PixelSearch($x,175,$x,175,0xFFFFFF)
	If @error Then
		$x = $x + 4 ; $x = 950
		PixelSearch($x,175,$x,175,0xFFFFFF)
		If @error Then
			$x = $x - 2 ; $x = 948
			PixelSearch($x,173,$x,173,0xFFFFFF)
			If @error Then
				$x = $x - 2 ; $x = 946
				PixelSearch($x,177,$x,177,0xFFFFFF)
				If Not @error Then
					$number2 = 8
					;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
				EndIf
			EndIf
		EndIf
	EndIf
	;-------------------- 9 ---------------------
	$x = $X2 + 1
	PixelSearch($x,173,$x,173,0xFFFFFF)
	If Not @error Then
		PixelSearch($x,177,$x,177,0xFFFFFF)
		If @error Then
			$x = $x + 4 ; $x = 950
			PixelSearch($x,173,$x,173,0xFFFFFF)
			If Not @error Then
				PixelSearch($x,177,$x,177,0xFFFFFF)
				If Not @error Then
					$number2 = 9
					;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
				EndIf
			EndIf
		EndIf
	EndIf
	Return ($number1 & $number2)
EndFunc


Func _CoordY()
Dim $X3 = 966 
Dim $X4 = 973
Dim $x = 0
Dim $number3 = 0
Dim $number4 = 0

	;----------------- $number3 -----------------
	;-------------------- 1 ---------------------
	
	$x = $X3
	;Local $x = 945
	$x = $x + 3 ; $x = 948
	PixelSearch($x,173,$x,173,0xFFFFFF)
	If Not @error Then
		PixelSearch($x,174,$x,174,0xFFFFFF)
		If Not @error Then
			PixelSearch($x,176,$x,176,0xFFFFFF)
			If Not @error Then
				PixelSearch($x,177,$x,177,0xFFFFFF)
				If Not @error Then
					$number3 = 1
					;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
				EndIf
				
			EndIf
		EndIf
	EndIf
	;-------------------- 2 ---------------------
	$x = $X3 + 1
	PixelSearch($x,172,$x,172,0xFFFFFF)
	If Not @error Then
		PixelSearch($x,173,$x,173,0xFFFFFF)
		If @error Then
			$x = $x + 4 ; $x = 950
			PixelSearch($x,177,$x,177,0xFFFFFF)
			If @error Then
				PixelSearch($x,178,$x,178,0xFFFFFF)
				If Not @error Then
					$number3 = 2
					;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
				EndIf
				
			EndIf
		EndIf
	EndIf
	;-------------------- 3 ---------------------
	$x = $X3 + 5
	PixelSearch($x,175,$x,175,0xFFFFFF)
	If @error Then
		$x = $x - 4 ; $x = 946
		PixelSearch($x,172,$x,172,0xFFFFFF)
		If Not @error Then
			PixelSearch($x,178,$x,178,0xFFFFFF)
			If Not @error Then
				$number3 = 3
				;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
			EndIf
		EndIf
	EndIf
	;-------------------- 4 ---------------------
	$x = $X3 + 4
	PixelSearch($x,173,$x,173,0xFFFFFF)
	If Not @error Then
		$x = $x - 1 ; $x = 948
		PixelSearch($x,178,$x,178,0xFFFFFF)
		If @error Then
			$number3 = 4
		EndIf
		;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
	EndIf
	;-------------------- 5 ---------------------
	$x = $X3 + 5
	PixelSearch($x,173,$x,173,0xFFFFFF)
	If @error Then
		$x = $x - 4 ; $x = 946
		PixelSearch($x,177,$x,177,0xFFFFFF)
		If @error Then
			$x = $x + 2 ; $x = 948
			PixelSearch($x,173,$x,173,0xFFFFFF)
			If @error Then
				PixelSearch($x,175,$x,175,0xFFFFFF)
				If Not @error Then
					$x = $x + 1 ; $x = 949
					PixelSearch($x,173,$x,173,0xFFFFFF)
					If @error Then
						$number3 = 5
					EndIf
					;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
				EndIf
			EndIf
		EndIf
	EndIf
	;-------------------- 6 ---------------------
	$x = $X3 + 5
	PixelSearch($x,173,$x,173,0xFFFFFF)
	If @error Then
		$x = $x - 4 ; $x = 946
		PixelSearch($x,177,$x,177,0xFFFFFF)
		If Not @error Then
			$number3 = 6
			;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
		EndIf
	EndIf
	;-------------------- 7 ---------------------
	$x = $X3 + 1
	PixelSearch($x,173,$x,173,0xFFFFFF)
	If @error Then
		PixelSearch($x,177,$x,177,0xFFFFFF)
		If @error Then
			$x = $x + 4 ; $x = 950
			PixelSearch($x,175,$x,175,0xFFFFFF)
			If Not @error Then
				$x = $x - 2 ; $x = 948
				PixelSearch($x,175,$x,175,0xFFFFFF)
				If @error Then
					$number3 = 7
					;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
				EndIf
			EndIf
		EndIf
	EndIf
	;-------------------- 8 ---------------------
	$x = $X3 + 1
	PixelSearch($x,175,$x,175,0xFFFFFF)
	If @error Then
		$x = $x + 4 ; $x = 950
		PixelSearch($x,175,$x,175,0xFFFFFF)
		If @error Then
			$x = $x - 2 ; $x = 948
			PixelSearch($x,173,$x,173,0xFFFFFF)
			If @error Then
				$x = $x - 2 ; $x = 946
				PixelSearch($x,177,$x,177,0xFFFFFF)
				If Not @error Then
					$number3 = 8
					;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
				EndIf
			EndIf
		EndIf
	EndIf
	;-------------------- 9 ---------------------
	$x = $X3 + 1
	PixelSearch($x,173,$x,173,0xFFFFFF)
	If Not @error Then
		PixelSearch($x,177,$x,177,0xFFFFFF)
		If @error Then
			$x = $x + 4 ; $x = 950
			PixelSearch($x,173,$x,173,0xFFFFFF)
			If Not @error Then
				PixelSearch($x,177,$x,177,0xFFFFFF)
				If Not @error Then
					$number3 = 9
					;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
				EndIf
			EndIf
		EndIf
	EndIf
	;----------------- $number4 -----------------
	;-------------------- 1 ---------------------
	$x = $X4 + 3 ; $x = 948
	PixelSearch($x,173,$x,173,0xFFFFFF)
	If Not @error Then
		PixelSearch($x,174,$x,174,0xFFFFFF)
		If Not @error Then
			PixelSearch($x,176,$x,176,0xFFFFFF)
			If Not @error Then
				PixelSearch($x,177,$x,177,0xFFFFFF)
				If Not @error Then
					$number4 = 1
					;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
				EndIf
				
			EndIf
		EndIf
	EndIf
	;-------------------- 2 ---------------------
	$x = $X4 + 1
	PixelSearch($x,172,$x,172,0xFFFFFF)
	If Not @error Then
		PixelSearch($x,173,$x,173,0xFFFFFF)
		If @error Then
			$x = $x + 4 ; $x = 950
			PixelSearch($x,177,$x,177,0xFFFFFF)
			If @error Then
				PixelSearch($x,178,$x,178,0xFFFFFF)
				If Not @error Then
					$number4 = 2
					;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
				EndIf
				
			EndIf
		EndIf
	EndIf
	;-------------------- 3 ---------------------
	$x = $X4 + 5
	PixelSearch($x,175,$x,175,0xFFFFFF)
	If @error Then
		$x = $x - 4 ; $x = 946
		PixelSearch($x,172,$x,172,0xFFFFFF)
		If Not @error Then
			PixelSearch($x,178,$x,178,0xFFFFFF)
			If Not @error Then
				$number4 = 3
				;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
			EndIf
		EndIf
	EndIf
	;-------------------- 4 ---------------------
	$x = $X4 + 4
	PixelSearch($x,173,$x,173,0xFFFFFF)
	If Not @error Then
		$x = $x - 1 ; $x = 948
		PixelSearch($x,178,$x,178,0xFFFFFF)
		If @error Then
			$number4 = 4
		EndIf
		;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
	EndIf
	;-------------------- 5 ---------------------
	$x = $X4 + 5
	PixelSearch($x,173,$x,173,0xFFFFFF)
	If @error Then
		$x = $x - 4 ; $x = 946
		PixelSearch($x,177,$x,177,0xFFFFFF)
		If @error Then
			$x = $x + 2 ; $x = 948
			PixelSearch($x,173,$x,173,0xFFFFFF)
			If @error Then
				PixelSearch($x,175,$x,175,0xFFFFFF)
				If Not @error Then
					$x = $x + 1 ; $x = 949
					PixelSearch($x,173,$x,173,0xFFFFFF)
					If @error Then
						$number4 = 5
					EndIf
					;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
				EndIf
			EndIf
		EndIf
	EndIf
	;-------------------- 6 ---------------------
	$x = $X4 + 5
	PixelSearch($x,173,$x,173,0xFFFFFF)
	If @error Then
		$x = $x - 4 ; $x = 946
		PixelSearch($x,177,$x,177,0xFFFFFF)
		If Not @error Then
			$number4 = 6
			;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
		EndIf
	EndIf
	;-------------------- 7 ---------------------
	$x = $X4 + 1
	PixelSearch($x,173,$x,173,0xFFFFFF)
	If @error Then
		PixelSearch($x,177,$x,177,0xFFFFFF)
		If @error Then
			$x = $x + 4 ; $x = 950
			PixelSearch($x,175,$x,175,0xFFFFFF)
			If Not @error Then
				$x = $x - 2 ; $x = 948
				PixelSearch($x,175,$x,175,0xFFFFFF)
				If @error Then
					$number4 = 7
					;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
				EndIf
			EndIf
		EndIf
	EndIf
	;-------------------- 8 ---------------------
	$x = $X4 + 1
	PixelSearch($x,175,$x,175,0xFFFFFF)
	If @error Then
		$x = $x + 4 ; $x = 950
		PixelSearch($x,175,$x,175,0xFFFFFF)
		If @error Then
			$x = $x - 2 ; $x = 948
			PixelSearch($x,173,$x,173,0xFFFFFF)
			If @error Then
				$x = $x - 2 ; $x = 946
				PixelSearch($x,177,$x,177,0xFFFFFF)
				If Not @error Then
					$number4 = 8
					;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
				EndIf
			EndIf
		EndIf
	EndIf
	;-------------------- 9 ---------------------
	$x = $X4 + 1
	PixelSearch($x,173,$x,173,0xFFFFFF)
	If Not @error Then
		PixelSearch($x,177,$x,177,0xFFFFFF)
		If @error Then
			$x = $x + 4 ; $x = 950
			PixelSearch($x,173,$x,173,0xFFFFFF)
			If Not @error Then
				PixelSearch($x,177,$x,177,0xFFFFFF)
				If Not @error Then
					$number4 = 9
					;TrayTip('','Абракадабра $number2 = ' & $number2,0,1)
				EndIf
			EndIf
		EndIf
	EndIf
	Return ($number3 & $number4)
EndFunc

zlo-kazan:
По коду всё правильно понимаешь, только у меня мозга не хватает его укоротить. По тому и обращаюсь к знающим людям :smile:
Из памяти вытаскивать не получится, т.к. стоит античит. Перехватывать сетевые пакеты я пока-что не научился. Сначала освою алгоритм, а потом буду модернизировать и получать новые знания.

К стати на нашёл кнопку как ответить конкретному человеку, наверно потому-что Опера.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 591
Репутация
938
Re: Определениче числа по пикселям

http://autoit-script.ru/index.php?topic=182.0
 
Автор
A

anonymous7

Знающий
Сообщения
40
Репутация
8
Re: Определениче числа по пикселям

Об PixelSearchEx я уже думал, но не смог разобраться в работе... Пример в нём для меня слишком мудрёный. Можешь если не трудна написать пример на основе моего скрипта? буду очень признателен!
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 591
Репутация
938
Re: Определениче числа по пикселям

Нет не могу, лениво мне да и устал я после тяжелого рабочего дня .
Могу объяснить на словах.

Принцип работы: В PixelSearchEx ты отправляешь пиксель того цвета который содержит твой искомый объект, например цифра 5 в числе 85. указываешь какую-то область в которую это число входит и указываешь контрольные проверки нужных пикселей относительно первого найденного в PixelSearchEx. Если контрольные проверки совпадут, то будет считаться что искомый объект найден.
Словестный пример:
Нужно найти белый цвет на приведенной тобой картинке. После нахождения белого цвета надо проверить чтобы относительно того пикселя где был найден цвет, пиксель на +0 по Х и +2 по Y был белым а пиксель находящийся на +0 по X и +7 по Y был черным.

PixelSearchEx просто продолжает поиск по заданной области до тех пор пока не пройдет ее всю либо один из пикселей не покажет что проверки других пикселей относительно его прошли успешно. Посмотри пример ChekPixel там именно это и описано. На черной картинке когда ищется пучек пикселей, проверяется именно условие из CheckPixel. Возьми его за пример и попробуй найти на черном фоне например для начала 2 подряд идущих каких-нибудь пикселей определенного цвета.
 

ynbIpb

Скриптер
Сообщения
399
Репутация
109
Re: Определениче числа по пикселям

смотри мой метод для Lineage2
тык
 
Автор
A

anonymous7

Знающий
Сообщения
40
Репутация
8
Re: Определениче числа по пикселям

Можно примерчик как получить через PixelSearchEx в заданном квадрате все координаты одного цвета?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 591
Репутация
938
Re: Определениче числа по пикселям

PixelSearchEx в текущем своем состоянии расчитывался лишь на поиск первого нужного пикселя или пресета пикселей. В прочем твоя цель вполне вписывается в его возможности если ты слегка усовершенствуешь его.
 
Автор
A

anonymous7

Знающий
Сообщения
40
Репутация
8
Re: Определениче числа по пикселям

Вот переделанный скрипт. Нужен для игры РФ онлайн работает в оконном режиме с разрешением 1024 на 768

Код:
Func _CoordX()

Local $number1 = 0
Local $number2 = 0

Local $p11 = PixelGetColor(939,172)
Local $p12 = PixelGetColor(939,175)
Local $p13 = PixelGetColor(939,173)
Local $p14 = PixelGetColor(939,176)
Local $p16 = PixelGetColor(943,176)
Local $p18 = PixelGetColor(943,173)
Local $p19 = PixelGetColor(942,176)

Local $p21 = PixelGetColor(946,172)
Local $p22 = PixelGetColor(946,175)
Local $p23 = PixelGetColor(946,173)
Local $p24 = PixelGetColor(946,176)
Local $p26 = PixelGetColor(950,176)
Local $p28 = PixelGetColor(950,173)
Local $p29 = PixelGetColor(949,176)

If $p11 <> 16777215 And $p14 <> 16777215 And $p16 <> 16777215 And $p18 <> 16777215 Then 					$number1 = 1
If $p13 <> 16777215 And $p16 <> 16777215 And $p11 = 16777215 Then											$number1 = 2
If $p12 = 16777215 And $p13 <> 16777215 And $p14 <> 16777215 Then 											$number1 = 3
If $p19 = 16777215 Then 																					$number1 = 4
If $p18 <> 16777215 And $p14 <> 16777215 And $p19 <> 16777215 And $p13 = 16777215 Then						$number1 = 5
If $p18 <> 16777215 And $p14 = 16777215 And $p19 <> 16777215 And $p16 = 16777215 Then						$number1 = 6
If $p12 <> 16777215 And $p13 <> 16777215 And $p11 = 16777215 Then											$number1 = 7
If $p12 <> 16777215 And $p13 = 16777215 Then 																$number1 = 8
If $p14 <> 16777215 And $p12 = 16777215 And $p16 = 16777215 And $p13 = 16777215 And $p18 = 16777215 Then 	$number1 = 9

If $p21 <> 16777215 And $p24 <> 16777215 And $p26 <> 16777215 And $p28 <> 16777215 Then 					$number2 = 1
If $p23 <> 16777215 And $p26 <> 16777215 And $p21 = 16777215 Then											$number2 = 2
If $p22 = 16777215 And $p23 <> 16777215 And $p24 <> 16777215 Then 											$number2 = 3
If $p29 = 16777215 Then 																					$number2 = 4
If $p28 <> 16777215 And $p24 <> 16777215 And $p29 <> 16777215 And $p23 = 16777215 Then						$number2 = 5
If $p28 <> 16777215 And $p24 = 16777215 And $p29 <> 16777215 And $p26 = 16777215 Then						$number2 = 6
If $p22 <> 16777215 And $p23 <> 16777215 And $p21 = 16777215 Then											$number2 = 7
If $p22 <> 16777215 And $p23 = 16777215 Then 																$number2 = 8
If $p24 <> 16777215 And $p22 = 16777215 And $p26 = 16777215 And $p23 = 16777215 And $p28 = 16777215 Then 	$number2 = 9	

Return ($number1 & $number2)
EndFunc

Func _CoordY()

Local $number3 = 0
Local $number4 = 0

Local $p31 = PixelGetColor(967,172)
Local $p32 = PixelGetColor(967,175)
Local $p33 = PixelGetColor(967,173)
Local $p34 = PixelGetColor(967,176)
Local $p36 = PixelGetColor(971,176)
Local $p38 = PixelGetColor(971,173)
Local $p39 = PixelGetColor(970,176)

Local $p41 = PixelGetColor(974,172)
Local $p42 = PixelGetColor(974,175)
Local $p43 = PixelGetColor(974,173)
Local $p44 = PixelGetColor(974,176)
Local $p46 = PixelGetColor(978,176)
Local $p48 = PixelGetColor(978,173)
Local $p49 = PixelGetColor(977,176)

If $p31 <> 16777215 And $p34 <> 16777215 And $p36 <> 16777215 And $p38 <> 16777215 Then 					$number3 = 1
If $p33 <> 16777215 And $p36 <> 16777215 And $p31 = 16777215 Then											$number3 = 2
If $p32 = 16777215 And $p33 <> 16777215 And $p34 <> 16777215 Then 											$number3 = 3
If $p39 = 16777215 Then 																					$number3 = 4
If $p38 <> 16777215 And $p34 <> 16777215 And $p39 <> 16777215 And $p33 = 16777215 Then						$number3 = 5
If $p38 <> 16777215 And $p34 = 16777215 And $p39 <> 16777215 And $p36 = 16777215 Then						$number3 = 6
If $p32 <> 16777215 And $p33 <> 16777215 And $p31 = 16777215 Then											$number3 = 7
If $p32 <> 16777215 And $p33 = 16777215 Then 																$number3 = 8
If $p34 <> 16777215 And $p32 = 16777215 And $p36 = 16777215 And $p33 = 16777215 And $p38 = 16777215 Then 	$number3 = 9

If $p41 <> 16777215 And $p44 <> 16777215 And $p46 <> 16777215 And $p48 <> 16777215 Then 					$number4 = 1
If $p43 <> 16777215 And $p46 <> 16777215 And $p41 = 16777215 Then											$number4 = 2
If $p42 = 16777215 And $p43 <> 16777215 And $p44 <> 16777215 Then 											$number4 = 3
If $p49 = 16777215 Then 																					$number4 = 4
If $p48 <> 16777215 And $p44 <> 16777215 And $p49 <> 16777215 And $p43 = 16777215 Then						$number4 = 5
If $p48 <> 16777215 And $p44 = 16777215 And $p49 <> 16777215 And $p46 = 16777215 Then						$number4 = 6
If $p42 <> 16777215 And $p43 <> 16777215 And $p41 = 16777215 Then											$number4 = 7
If $p42 <> 16777215 And $p43 = 16777215 Then 																$number4 = 8
If $p44 <> 16777215 And $p42 = 16777215 And $p46 = 16777215 And $p43 = 16777215 And $p48 = 16777215 Then 	$number4 = 9

Return ($number3 & $number4)	
EndFunc
 

NoMad73rus

Продвинутый
Сообщения
124
Репутация
80
Мой вариант "OCR"

Код:
Global $int_hp[10] ; цифры
$int_hp[0] = '0111110100000110000010111110'
$int_hp[1] = '0000000010000111111110000001'
$int_hp[2] = '1000011100010110010010110001'
$int_hp[3] = '1000001100100110010010110110'
$int_hp[4] = '0001100001010001001001111111'
$int_hp[5] = '1111001100100110010011000110'
$int_hp[6] = '0111110100100110010010000110'
$int_hp[7] = '1000001100011010110001100000'
$int_hp[8] = '0110110100100110010010110110'
$int_hp[9] = '0110000100100110010010111110'


Func _lern_sim($sx, $sy, $sim)
	Local $cifri[4], $return = ''
	For $chr = 0 To $sim-1
		For $ix = 0 To 3
			For $iy = 0 To 6
				If _BrightGet(_detekt($sx+$ix+5*$chr, $sy+$iy)) > 110 Then
					$cifri[$chr] &= 1
				Else
					$cifri[$chr] &= 0
				EndIf
			Next
		Next
		For $int = 0 To 9
			If $cifri[$chr] = $int_hp[$int] Then
				$return &= $int
				ExitLoop
			EndIf
		Next
	Next
	If $return = '' Then Return '#'
	Return $return
EndFunc


Думаю нет особой нужды, но всё же поясню:
_detekt(x,y) возвращает цвет из координат x,y
_BrightGet(color) возвращает яркость цвета (0-255)

Функции нужно только сообщить координаты $sx и $sy - это координаты левого верхнего угла цифры, и $sim - колличество символов которые нужно прочесть.

Судя по картинке цифры у вас достаточно простые, и подогнать этот механизм под их "чтение" не составит труда.

Для ясности: $hp_int[x] - это записанный в строку квадрат с цифрой 0-пиксель фона 1-пиксель символа. сверху вниз, с лева на право

Например для цифры 8:
0110
1001
1001
0110
1001
1001
0110

получаем строчку "0110110100100110010010110110"
 
Автор
A

anonymous7

Знающий
Сообщения
40
Репутация
8
Очень интересный скриптик... $sim - количество каких символов?
Можешь примерчик оформит на одну пару чисел если не трудно?... Это бы мне объяснило все мои вопросы. PLEASE 8)
Картинка ещё раз ниже...

 
Автор
A

anonymous7

Знающий
Сообщения
40
Репутация
8
UP
NoMad73rus -> Где взять эти функции _detekt и _BrightGet ?
 

NoMad73rus

Продвинутый
Сообщения
124
Репутация
80
Код:
Func _detekt ($iX, $iY)		;вернуть цвет из координат
	$nColor = PixelGetColor($iX, $iY, $hWnd)
	Return $nColor
EndFunc

Func _BrightGet($nColor)			;яркость по цвету
	$nColor = Hex($nColor,6)
	$nColor = StringSplit($nColor, '')
	$bright = (Dec($nColor[1]&$nColor[2])+ Dec($nColor[3]&$nColor[4])+ Dec($nColor[5]&$nColor[6]))/3
;~ 	ConsoleWrite($bright&@CRLF&@hour&':'&@min&'#')
	Return $bright
EndFunc


А вообще это есть на форуме в огромном количестве.
 
Верх