S_K
Новичок
- Сообщения
- 30
- Репутация
- 0
Описание:
скрипт ищет опорный пиксель, и окружающие пиксели рядом
например есть 5 красных точек какие разбросаны на изображении, он находит ту красною точку с какой рядом ещё несколько цветов: синий,зеленой,желтой,голубой, и наводит мышью на красною точку с какое рядом эти цвета
этой поиск пикселей занимает больше 5 секунд - это очень много
Вопрос такое, как можно уменьшить это время ?
Примечания:
скрипт ищет опорный пиксель, и окружающие пиксели рядом
например есть 5 красных точек какие разбросаны на изображении, он находит ту красною точку с какой рядом ещё несколько цветов: синий,зеленой,желтой,голубой, и наводит мышью на красною точку с какое рядом эти цвета
этой поиск пикселей занимает больше 5 секунд - это очень много
Вопрос такое, как можно уменьшить это время ?
Примечания:
Код:
#include <WinAPIEx.au3>
#include <WindowsConstants.au3>
HotKeySet("{ESC}", "_Exit")
HotKeySet("{F3}", "Find")
While Sleep(100)
WEnd
Func Find()
$Array = _PixelGetArray(0, 0, @DesktopWidth, @DesktopHeight, 0xED1C24)
If Not $Array[0][0] Then
ConsoleWrite("Не найдены опорные пиксели")
Return
EndIf
For $i = 1 To $Array[0][0]
If GetSurround($Array[$i][0], $Array[$i][1], 0xFFF200, 0x00A2E8, 0xFFC90E, 0xB5E61D) Then
MouseMove($Array[$i][0], $Array[$i][1], 0)
ConsoleWrite("Найдено: X=" & $Array[$i][0] & ", Y=" & $Array[$i][1])
ExitLoop
EndIf
Next
If $i > $Array[0][0] Then ConsoleWrite("Не найдены окружающие пиксели")
EndFunc
Func _PixelGetArray($i_X, $i_Y, $i_Width, $i_Height, $i_Color, $h_Wnd = 0, $f_FirstOnly = False)
Local $i_Size = $i_Width * $i_Height, $a_Pixels[$i_Size + 1][2] = [[0]], $h_DC, $h_MemDC, $h_Bitmap, $t_Bits, $i_Index
$h_DC = _WinAPI_GetDC($h_Wnd)
$h_MemDC = _WinAPI_CreateCompatibleDC($h_DC)
$h_Bitmap = _WinAPI_CreateCompatibleBitmap($h_DC, $i_Width, $i_Height)
_WinAPI_SelectObject($h_MemDC, $h_Bitmap)
_WinAPI_BitBlt($h_MemDC, 0, 0, $i_Width, $i_Height, $h_DC, $i_X, $i_Y, $SRCCOPY)
_WinAPI_DeleteDC($h_MemDC)
_WinAPI_ReleaseDC($h_Wnd, $h_DC)
$t_Bits = DllStructCreate('dword[' & $i_Size & ']')
$p_Bits = DllStructGetPtr($t_Bits)
_WinAPI_GetBitmapBits($h_Bitmap, 4 * $i_Size, $p_Bits)
_WinAPI_DeleteObject($h_Bitmap)
For $i = 0 To $i_Height - 1
For $j = 0 To $i_Width - 1
$i_Index += 1
If BitAND(DllStructGetData($t_Bits, 1, $i_Index), 0x00FFFFFF) = $i_Color Then
$a_Pixels[0][0] += 1
$a_Pixels[$a_Pixels[0][0]][0] = $j + $i_X
$a_Pixels[$a_Pixels[0][0]][1] = $i + $i_Y
If $f_FirstOnly Then ExitLoop 2
EndIf
Next
Next
ReDim $a_Pixels[$a_Pixels[0][0] + 1][2]
Return $a_Pixels
EndFunc
Func GetSurround($X, $Y, $Left, $Right, $Up, $Down)
If PixelGetColor($X - 1, $Y) = $Left _
And PixelGetColor($X + 1, $Y) = $Right _
And PixelGetColor($X, $Y - 1) = $Up _
And PixelGetColor($X, $Y + 1) = $Down Then Return True
Return False
EndFunc
Func _Exit()
Exit
EndFunc