Тестирую код
Если искомый пиксель находится скажем вверху приложения, то скорость определения через API составляет 0,2....0.5 сек (PixelGetColor воообще не рассматриваю т.к он очень тупит)
Если пиксель находится внизу приложения, скорость определения пикселя через API примерно 6-7сек.
Тестировал на Вин7 х86 1920х1080 С Аеро без аеро (не сильно влияло на скорость поиска)
Пробовал на виртуалке (варя7) ВинХР СП3 800х600 1024х768 результаты времени оставались примерно теже.
Это нормальная скорость или у меня чтото не так с системой?
Насколько я понимаю ускорения можно добиться за счет сужения зоны поиска пикселя, можно ли это реализовать через API , если можно пример?
И еще один вопрос если приложение динамически изменяется, скажем игра, то пиксель вовсе не находит, почему такое может быть ?
Код:
#Include <Constants.au3>
#Include <WinAPIEx.au3>
#Include <WindowsConstants.au3>
$Size = WinGetClientSize($hWnd)
$hDC = _WinAPI_GetDC($hWnd)
$hMemDC = _WinAPI_CreateCompatibleDC($hDC)
$hBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $Size[0], $Size[1])
$hSv = _WinAPI_SelectObject($hMemDC, $hBitmap)
_WinAPI_BitBlt($hMemDC, 0, 0, $Size[0], $Size[1], $hDC, 0, 0, $SRCCOPY)
_WinAPI_SelectObject($hMemDC, $hSv)
_WinAPI_DeleteDC($hMemDC)
_WinAPI_ReleaseDC($hWnd, $hDC)
; Здесь у тебя есть готовый битмап ($hBitmap), делай с ним что хочешь!
; Ищем точку с цветом 0x87BEF5 (RGB)
$ARGB = _WinAPI_IntToDWord(BitOR(0x87BEF5, 0xFF000000))
$L = $Size[0] * $Size[1]
$tBits = DllStructCreate('dword[' & $L & ']')
_WinAPI_GetBitmapBits($hBitmap, 4 * $L, DllStructGetPtr($tBits))
$Timer = TimerInit()
$Offset = -1
For $i = 1 To $L
If DllStructGetData($tBits, 1, $i) = $ARGB Then
$Offset = $i
ExitLoop
EndIf
Next
ConsoleWrite('API' & @CR)
ConsoleWrite(TimerDiff($Timer) & @CR)
If $Offset = -1 Then
ConsoleWrite('Not Found!' & @CR)
Else
ConsoleWrite('X = ' & Mod($Offset, $Size[0]) - 1 & @CR)
ConsoleWrite('Y = ' & Ceiling($Offset / $Size[0]) - 1 & @CR)
EndIf
ConsoleWrite('' & @CR)
;----------------------------------------
Если искомый пиксель находится скажем вверху приложения, то скорость определения через API составляет 0,2....0.5 сек (PixelGetColor воообще не рассматриваю т.к он очень тупит)
Если пиксель находится внизу приложения, скорость определения пикселя через API примерно 6-7сек.
Тестировал на Вин7 х86 1920х1080 С Аеро без аеро (не сильно влияло на скорость поиска)
Пробовал на виртуалке (варя7) ВинХР СП3 800х600 1024х768 результаты времени оставались примерно теже.
Это нормальная скорость или у меня чтото не так с системой?
Насколько я понимаю ускорения можно добиться за счет сужения зоны поиска пикселя, можно ли это реализовать через API , если можно пример?
И еще один вопрос если приложение динамически изменяется, скажем игра, то пиксель вовсе не находит, почему такое может быть ?