PDA

Просмотр полной версии : [Обсуждение] WinAPI GetPixel() - чем заменить?


sergaxt
20.02.2011, 19:56
Всем привет!
Использую GetPixel() для определения цвета пикселя по указанным координатам, но GetPixel() - очень тормознутая функция,
- есть ли алгоритм определения цвета пикселя без использования GetPixel()?
- или алгоритм поиска пикселя с указанным цветом в определённой области экрана?

byearab
20.02.2011, 20:12
Показывает цвет в любой точке любого окна если ее(точку) видно глазами


#include <WinAPI.au3>
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>
#Include <date.au3>
#include <GuiEdit.au3>
#include <GuiConstantsEx.au3>

;Opt("PixelCoordMode",2)

Opt("WinTitleMatchMode",1)
Opt("WinDetectHiddenText",1)
;Opt("MouseCoordMode",2)

Global $Title = "Bla-bla-bla",$klass = "MacromediaFlashPlayerActiveX2"

$hWnd = WinGetHandle($Title)
$Form1 = GUICreate("Координатор", 208, 278, 419, 182)
$Edit1 = GUICtrlCreateEdit("", 16, 8, 177, 233, BitOR($ES_AUTOVSCROLL,$ES_WANTRETURN,$WS_VSCROLL))
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit

EndSwitch
;$koord = ControlGetPos( $titl, "", $klass) ; тут привязаться к окну и элементу окна
$pos = MouseGetPos() ; чтоб координаты стали относительные
;$pos[0] = координата Х вместо курсора
;$pos[1] = координата Y вместо курсора
;$pos[0] = $pos[0]+ $koord[0]
;$pos[1] = $pos[1] + $koord[1]

Sleep(10)
_MouseClickOnScreenCoords("Main", $hWnd, $pos[0], $pos[1], 1)
WEnd


Func _MouseClickOnScreenCoords($sButton, $hWnd, $iX, $iY, $iSpeed=10)
Local $Struct = DllStructCreate("int X;int Y")

DllStructSetData($Struct, "X", $iX)
DllStructSetData($Struct, "Y", $iY)

_WinAPI_ScreenToClient($Title, $Struct)

$iX = DllStructGetData($Struct, "X")
$iY = DllStructGetData($Struct, "Y")

Local $iOld_Opt = Opt("MouseCoordMode", 2)
$Cpos = PixelGetColor ($iX, $iY)
GUICtrlSetData($Edit1,$iX&","& $iY&" "& $Cpos)

Opt("MouseCoordMode", $iOld_Opt)
EndFunc


Источник ([Ссылки могут видеть только зарегистрированные и активированные пользователи])

sergaxt
20.02.2011, 20:50
byearab,
Там используется PixelGetColor() (Autoit) - эта функция ещё медленнее, чем GetPixel() через WinAPI, - для фешек ещё куда ни шло, но для быстрых, динамичных игр не пойдёт...