Что нового

Функция, обратная Pixelsearch

Castellan

Новичок
Сообщения
32
Репутация
2
Решил сделать функцию, которая в отличие от Pixelsearch ищет в заданной области пиксели, по цвету отличающиеся от заданного и , если находит, то присваивает @error=true, иначе false. Однако не находит пиксели (а они точно есть в данной области).
Код:
Global $Oblast
   Local $OptOblast[5] = [1, 1, 100, 100, 0x000000] ;область 100х100 
   Pixelmono($OptOblast[0], $OptOblast[1], $OptOblast[2], $OptOblast[3], $OptOblast[4]) ;ищем, есть ли в указанной области пиксели другого цвета, кроме указанного (черного)
   If @error Then 
	  $Oblast = "Есть пиксели другого цвета" 
   Else
	  $Oblast = "Нет пикселей другого цвета"
   EndIf
Func PixelMono ($x1, $y1, $x2, $y2, $cv)
   Local $x, $y
   Local $error = 0
   $y=$y1
   While $y<=$y2 & $error = 0
	  $x=$x1
	  While $x<=$x2 & $error = 0
		 PixelSearch ($x, $y, $x, $y, $cv)
		 If @error Then
			$error = 1
		 EndIf
	  $x=$x+1
	  WEnd
   $y=$y+1
   WEnd
EndFunc
 

rusreg79

Продвинутый
Сообщения
159
Репутация
57
Разве такого выражения не достаточно что бы определить есть черный цвет в области или нет?

Код:
PixelSearch (0, 0, 100, 100, 0x000000)
If @error Then
  ;пиксель не найден
EndIf
 
Автор
C

Castellan

Новичок
Сообщения
32
Репутация
2
Так смысл как раз в том, чтобы определить, есть ли в указанной области хотя бы один пиксель другого цвета.
P.S. Добавил комменты в первом сообщении, чтоб понятнее было.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Не, скорее в этом
Список операторов, упорядоченный по снижению приоритета выглядит следующим образом:

NOT
^
* /
+ -
&
< > <= >= = <> ==
AND OR

И в этом
& - Объединение/конкатенация строк. "one" & 10 - ("one10")
:rofl:

То есть правильно надо было написать:
Код:
While ($y<=$y2) AND ($error = 0)



Добавлено:
Сообщение автоматически объединено:

А вообще я бы написал
Код:
Func PixelMono ($x1, $y1, $x2, $y2, $cv)
   Local $i, $j
   For $i = $y1 To $y2
      For $j=$x1 To $x2
         PixelSearch ($i, $j, $i, $j, $cv)
         If @error Then Return 0
      Next
   Next
Return 1
EndFunc
 
Автор
C

Castellan

Новичок
Сообщения
32
Репутация
2
спасибо за ответ!
еще вопрос: после выполнения функции Return цикл прекращается?
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
еще вопрос: после выполнения функции Return цикл прекращается?
Конечно!
Функцию можно закончить в любом месте этой замечательной командой. ;D
Поэтому предпочтительнее весь код писать в виде функций, а основную программу делать только из вызовов этих функций. Типа
Код:
Init()
Main()
Close()
;)
 
Автор
C

Castellan

Новичок
Сообщения
32
Репутация
2
и последний вопрос :-[ return присваивает значение самой функции или перменной? можно ли возвращать значение переменной? :-[
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Если в функции будет
Код:
Return 0

то функция вернет 0. Если будет
Код:
Return $Func

то функция вернет значение этой переменной
 
Верх