Что нового

[Автоматизация] Поиск пикселей в определенной области

MAS

Новичок
Сообщения
10
Репутация
0
Привет всем, пытаюсь сделать следующее:
Если в области поиска все пиксели определенного цвета нажать мышь- MouseClick("LEFT".

Ищу пиксели в координатах:
Код:
$Variable = PixelSearch(673,409,692,412,0xFF0000)

в общем вот код:
Код:
HotKeySet("{F6}","_Exit")
While 1
$Variable = PixelSearch(673,409,692,412,0xFF0000)
If IsArray($Variable) = True Then
MouseClick("LEFT")
EndIf
WEnd
Func _Exit()
Exit
EndFunc

Мой код я понимаю, если в области поиска найдет хотя бы несколько пикселей сразу нажимает.
Хотелось бы что бы выполнял условие только если в координатах поиска все пиксели одного цвета.
Кто может помочь :smile:
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
MAS [?]
Мой код я понимаю, если в области поиска найдет хотя бы несколько пикселей сразу нажимает.
Неправильно понимаете. Функция PixelSearch находит только один пиксель - первый попавшийся. Собственной функции, находящей массив пикселей, в AutoIt нет. Только пользовательские.
 
Автор
M

MAS

Новичок
Сообщения
10
Репутация
0
То есть невозможно выполнить условие типа:
при заполнении области поиска только одинаковыми пикселями выполнить удерживание ??? как быть :shok:
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
MAS, попробуйте
Код:
PixelChecksum()
 
Автор
M

MAS

Новичок
Сообщения
10
Репутация
0
не работает совсем, нажатие не происходит
Код:
HotKeySet("{F6}","_Exit")
While 1
$Variable = PixelChecksum(673,409,692,412,0xFF0000)
If IsArray($Variable) = True Then
sleep(1)
MouseClick("LEFT")
EndIf
WEnd
Func _Exit()
Exit
EndFunc
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
MAS, пример в справке. PixelChecksum возвращает контрольную сумму указанного региона, а не массив
 
Автор
M

MAS

Новичок
Сообщения
10
Репутация
0
Я вчера только начал изучать, не знаю толком как с этим PixelChecksum работать и что в if указывать, если не сложно покажите как в моем коде его использовать
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Код:
HotKeySet("{F6}", "_Exit")
HotKeySet("{F7}", "_UpdateChecksum")
Global $iChecksum = PixelChecksum(673, 409, 692, 412) ;получите контрольную сумму нужной вам в области с нужными цветами (обновить F7)

While 1
	If $iChecksum = PixelChecksum(673, 409, 692, 412) Then ;сравниваете -> если текущая сумма совпадает с полученной вначале -> клик
		Sleep(10)
		MouseClick("LEFT")
	EndIf
WEnd

Func _Exit()
	Exit
EndFunc   ;==>_Exit

Func _UpdateChecksum()
	$iChecksum = PixelChecksum(673, 409, 692, 412)
EndFunc   ;==>_UpdateChecksum
 
Автор
M

MAS

Новичок
Сообщения
10
Репутация
0
спасибо, но я пытался определить цвет 0xFF0000 в этой области, и если в искомой области все пиксели цвета 0xFF0000 то нажать на мышь :smile:
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
MAS, сохрание контрольную сумму когда в области все пиксели нужного цвета
 
Автор
M

MAS

Новичок
Сообщения
10
Репутация
0
как можно это сделать, не совсем понятно
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Пример
Код:
#include <MsgBoxConstants.au3>
HotKeySet("{F6}", "_Exit")
HotKeySet("{F7}", "_UpdateChecksum")
Global $g_iChecksum = Number(IniRead("PixelChecksum.ini", "PixelChecksum", "673|409|692|412", ""))
If Not $g_iChecksum Then MsgBox($MB_TOPMOST + $MB_ICONERROR, Default, "Установите контрольную сумму области пикселей (F7)")

While 1
	If $g_iChecksum = PixelChecksum(673, 409, 692, 412) Then
		Sleep(10)
		MouseClick("LEFT")
	EndIf
	Sleep(10)
WEnd

Func _UpdateChecksum()
	$g_iChecksum = PixelChecksum(673, 409, 692, 412)
	IniWrite("PixelChecksum.ini", "PixelChecksum", "673|409|692|412", $g_iChecksum)
	MsgBox($MB_TOPMOST + $MB_ICONINFORMATION, Default, "Контрольная сумма области пикселей установлена")
EndFunc   ;==>_UpdateChecksum

Func _Exit()
	Exit
EndFunc   ;==>_Exit
 
Автор
M

MAS

Новичок
Сообщения
10
Репутация
0
компилирую, запускаю скрипт, но куда вставлять цвет 0xFF0000 ?


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

немного разобрался, навожу прицел т.е в центре монитора нужный цвет и жму f7 в ini код цвета прописывается?запускаю exe Но нажимает переодически, или вообще не работает.
если центр монитора меняется на данный цвет(весь участок поиска) должен тут же нажать. Хм, или не правильно что то делаю
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
MAS, отклонения в цвете. Если это прицел не будет ли достаточно 1 пикселя (PixelGetColor)?


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

Попробуйте использовать режим CRC32 и убрать Sleep(10) между проверками (увеличит нагрузку на процессор)
 
Верх