Verzwicktes Problem mit Webcam und fdlib.dll Gesichtserkenung auf einmal

  • Tach!

    Ich hab mal wieder ein Problem, das da wäre:

    Ich habe ein Skript geschrieben dass mit Hilfe der fdlib.dll und AutoIt aus einem mit AutoIt getötigten Webcamfoto die Gesichter erkennt und deren Anzahl ausgibt. Das funktioniert soweit mäßig.

    Das Problem ist jetzt aber, dass ich laufend die Anzahl der Personen vor der Webcam erhalten möchte. Das geht eber nicht, weil die Webcam erstens eine GUI benötigt und zweitens immer der Webcam-Auswahlbildschirm erscheint. Das macht sich in einer Schleife natürlich nicht so gut.

    Das Skript (Funktioniert nciht ohne die Dll, welche es im Anhang samt Source gibt)

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>
    #include <WinAPI.au3>
    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    PR()

    [/autoit] [autoit][/autoit] [autoit]

    Func PR()
    #region Constants
    $WM_CAP_START = 0x400
    $WM_CAP_UNICODE_START = $WM_CAP_START +100
    $WM_CAP_PAL_SAVEA = $WM_CAP_START + 81
    $WM_CAP_PAL_SAVEW = $WM_CAP_UNICODE_START + 81
    $WM_CAP_UNICODE_END = $WM_CAP_PAL_SAVEW
    $WM_CAP_ABORT = $WM_CAP_START + 69
    $WM_CAP_DLG_VIDEOCOMPRESSION = $WM_CAP_START + 46
    $WM_CAP_DLG_VIDEODISPLAY = $WM_CAP_START + 43
    $WM_CAP_DLG_VIDEOFORMAT = $WM_CAP_START + 41
    $WM_CAP_DLG_VIDEOSOURCE = $WM_CAP_START + 42
    $WM_CAP_DRIVER_CONNECT = $WM_CAP_START + 10
    $WM_CAP_DRIVER_DISCONNECT = $WM_CAP_START + 11
    $WM_CAP_DRIVER_GET_CAPS = $WM_CAP_START + 14
    $WM_CAP_DRIVER_GET_NAMEA = $WM_CAP_START + 12
    $WM_CAP_DRIVER_GET_NAMEW = $WM_CAP_UNICODE_START + 12
    $WM_CAP_DRIVER_GET_VERSIONA = $WM_CAP_START + 13
    $WM_CAP_DRIVER_GET_VERSIONW = $WM_CAP_UNICODE_START + 13
    $WM_CAP_EDIT_COPY = $WM_CAP_START + 30
    $WM_CAP_END = $WM_CAP_UNICODE_END
    $WM_CAP_FILE_ALLOCATE = $WM_CAP_START + 22
    $WM_CAP_FILE_GET_CAPTURE_FILEA = $WM_CAP_START + 21
    $WM_CAP_FILE_GET_CAPTURE_FILEW = $WM_CAP_UNICODE_START + 21
    $WM_CAP_FILE_SAVEASA = $WM_CAP_START + 23
    $WM_CAP_FILE_SAVEASW = $WM_CAP_UNICODE_START + 23
    $WM_CAP_FILE_SAVEDIBA = $WM_CAP_START + 25
    $WM_CAP_FILE_SAVEDIBW = $WM_CAP_UNICODE_START + 25
    $WM_CAP_FILE_SET_CAPTURE_FILEA = $WM_CAP_START + 20
    $WM_CAP_FILE_SET_CAPTURE_FILEW = $WM_CAP_UNICODE_START + 20
    $WM_CAP_FILE_SET_INFOCHUNK = $WM_CAP_START + 24
    $WM_CAP_GET_AUDIOFORMAT = $WM_CAP_START + 36
    $WM_CAP_GET_CAPSTREAMPTR = $WM_CAP_START + 1
    $WM_CAP_GET_MCI_DEVICEA = $WM_CAP_START + 67
    $WM_CAP_GET_MCI_DEVICEW = $WM_CAP_UNICODE_START + 67
    $WM_CAP_GET_SEQUENCE_SETUP = $WM_CAP_START + 65
    $WM_CAP_GET_STATUS = $WM_CAP_START + 54
    $WM_CAP_GET_USER_DATA = $WM_CAP_START + 8
    $WM_CAP_GET_VIDEOFORMAT = $WM_CAP_START + 44
    $WM_CAP_GRAB_FRAME = $WM_CAP_START + 60
    $WM_CAP_GRAB_FRAME_NOSTOP = $WM_CAP_START + 61
    $WM_CAP_PAL_AUTOCREATE = $WM_CAP_START + 83
    $WM_CAP_PAL_MANUALCREATE = $WM_CAP_START + 84
    $WM_CAP_PAL_OPENA = $WM_CAP_START + 80
    $WM_CAP_PAL_OPENW = $WM_CAP_UNICODE_START + 80
    $WM_CAP_PAL_PASTE = $WM_CAP_START + 82
    $WM_CAP_SEQUENCE = $WM_CAP_START + 62
    $WM_CAP_SEQUENCE_NOFILE = $WM_CAP_START + 63
    $WM_CAP_SET_AUDIOFORMAT = $WM_CAP_START + 35
    $WM_CAP_SET_CALLBACK_CAPCONTROL = $WM_CAP_START + 85
    $WM_CAP_SET_CALLBACK_ERRORA = $WM_CAP_START + 2
    $WM_CAP_SET_CALLBACK_ERRORW = $WM_CAP_UNICODE_START + 2
    $WM_CAP_SET_CALLBACK_FRAME = $WM_CAP_START + 5
    $WM_CAP_SET_CALLBACK_STATUSA = $WM_CAP_START + 3
    $WM_CAP_SET_CALLBACK_STATUSW = $WM_CAP_UNICODE_START + 3
    $WM_CAP_SET_CALLBACK_VIDEOSTREAM = $WM_CAP_START + 6
    $WM_CAP_SET_CALLBACK_WAVESTREAM = $WM_CAP_START + 7
    $WM_CAP_SET_CALLBACK_YIELD = $WM_CAP_START + 4
    $WM_CAP_SET_MCI_DEVICEA = $WM_CAP_START + 66
    $WM_CAP_SET_MCI_DEVICEW = $WM_CAP_UNICODE_START + 66
    $WM_CAP_SET_OVERLAY = $WM_CAP_START + 51
    $WM_CAP_SET_PREVIEW = $WM_CAP_START + 50
    $WM_CAP_SET_PREVIEWRATE = $WM_CAP_START + 52
    $WM_CAP_SET_SCALE = $WM_CAP_START + 53
    $WM_CAP_SET_SCROLL = $WM_CAP_START + 55
    $WM_CAP_SET_SEQUENCE_SETUP = $WM_CAP_START + 64
    $WM_CAP_SET_USER_DATA = $WM_CAP_START + 9
    $WM_CAP_SET_VIDEOFORMAT = $WM_CAP_START + 45
    $WM_CAP_SINGLE_FRAME = $WM_CAP_START + 72
    $WM_CAP_SINGLE_FRAME_CLOSE = $WM_CAP_START + 71
    $WM_CAP_SINGLE_FRAME_OPEN = $WM_CAP_START + 70
    $WM_CAP_STOP = $WM_CAP_START + 68
    $CAM_FILE = "Person.bmp"
    $CAM_AVI = DllOpen("avicap32.dll")
    $DLL_USER = DllOpen("user32.dll")
    $hMain = GUICreate("TLC Person Control", 341, 327, 413, 74)
    $CAM_CAPTURE = DllCall($CAM_AVI, "int", "capCreateCaptureWindow", "str", "cap", "int", BitOR($WS_CHILD,$WS_VISIBLE), "int", 10, "int", 20, "int", 320, "int", 240, "hwnd", $hMAIN, "int", 1)
    DllCall($DLL_USER, "int", "SendMessage", "hWnd", $CAM_CAPTURE[0], "int", $WM_CAP_DRIVER_CONNECT, "int", 0, "int", 0)
    DllCall($DLL_USER, "int", "SendMessage", "hWnd", $CAM_CAPTURE[0], "int", $WM_CAP_SET_SCALE, "int", 1, "int", 0)
    DllCall($DLL_USER, "int", "SendMessage", "hWnd", $CAM_CAPTURE[0], "int", $WM_CAP_SET_OVERLAY, "int", 1, "int", 0)
    DllCall($DLL_USER, "int", "SendMessage", "hWnd", $CAM_CAPTURE[0], "int", $WM_CAP_SET_PREVIEW, "int", 1, "int", 0)
    DllCall($DLL_USER, "int", "SendMessage", "hWnd", $CAM_CAPTURE[0], "int", $WM_CAP_SET_PREVIEWRATE, "int", 1, "int", 0)
    GUISetState()
    DllCall($DLL_USER, "int", "SendMessage", "hWnd", $CAM_CAPTURE[0], "int", $WM_CAP_GRAB_FRAME_NOSTOP, "int", 0, "int", 0)
    DllCall($DLL_USER, "int", "SendMessage", "hWnd", $CAM_CAPTURE[0], "int", $WM_CAP_FILE_SAVEDIBA, "int", 0, "str", "Person.bmp")
    ConsoleWrite(Persons())
    GUIDelete()
    EndFunc
    Func Persons()
    ;progandy, gtaspider
    $hOpen = DllOpen("fdlib.dll")
    _GDIPlus_Startup()
    $hbBMP = _GDIPlus_BitmapCreateFromFile(@ScriptDir & "\Person.bmp")
    $iWidth = _GDIPlus_ImageGetWidth($hbBMP)
    $iHeight = _GDIPlus_ImageGetHeight($hbBMP)
    $hBMP = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hbBMP)
    $iThreshold = Number(50)
    If $iThreshold < 1 Then $iThreshold = 1
    $vBMP = _GDIPlus_BitmapToStructByte($hBMP, $iWidth, $iHeight)
    DllCall($hOpen, "int:cdecl", "fdlib_detectfaces", "ptr", DllStructGetPtr($vBMP), "int", $iWidth, "int", $iHeight, "int", $iThreshold)
    $nFace = DllCall($hOpen, "int:cdecl", "fdlib_getndetections")
    If Not @error Then
    $Faces = $nFace[0]
    Return $Faces
    Else
    Return 0
    SetError(1,1,1)
    EndIf
    DllClose($hOpen)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _GDIPlus_BitmapToStructByte($hBMP, $iW, $iH)
    Local $x, $y, $z, $sErrorHandlerString, $hDC, $hDC_tmp, $hBitmap, $vStruct_Byte, $vStruct_BMPInfo

    [/autoit] [autoit][/autoit] [autoit]

    Local $hBitmap = DllCall("User32.dll", "hwnd", "CopyImage", "hwnd", $hBMP, "int", 0, "int", 0, "int", 0, "int", 1);LR_MONOCHROME
    If @error Then Return SetError(1, 0, _WinAPI_GetLastErrorMessage())
    $hBitmap = $hBitmap[0]

    [/autoit] [autoit][/autoit] [autoit]

    $vStruct_Byte = DllStructCreate("byte graydata[" & $iW * $iH & "]")

    [/autoit] [autoit][/autoit] [autoit]

    Local $vStruct_BMPInfo = DllStructCreate("dword;long;long;ushort;ushort;dword;dword;long;long;dword;dword;dword RGBQuad[256];")
    $hDC_tmp = _WinAPI_GetDC(_WinAPI_GetDesktopWindow())
    $hDC = _WinAPI_CreateCompatibleDC($hDC_tmp)
    _WinAPI_ReleaseDC(0, $hDC_tmp)
    Local $hBitmapOld = _WinAPI_SelectObject($hDC, $hBitmap)

    [/autoit] [autoit][/autoit] [autoit]

    DllStructSetData($vStruct_BMPInfo, 1, DllStructGetSize(DllStructCreate("dword;long;long;ushort;ushort;dword;dword;long;long;dword;dword;", 1)))
    DllStructSetData($vStruct_BMPInfo, 2, $iW)
    DllStructSetData($vStruct_BMPInfo, 3, $iH * - 1)
    DllStructSetData($vStruct_BMPInfo, 4, 1)
    DllStructSetData($vStruct_BMPInfo, 5, 1)

    [/autoit] [autoit][/autoit] [autoit]

    _WinAPI_GetDIBits($hDC, $hBitmap, 0, $iH, DllStructGetPtr($vStruct_Byte), DllStructGetPtr($vStruct_BMPInfo), 0)

    [/autoit] [autoit][/autoit] [autoit]

    _WinAPI_DeleteObject(_WinAPI_SelectObject($hDC, $hBitmapOld))
    _WinAPI_DeleteDC($hDC)

    [/autoit] [autoit][/autoit] [autoit]

    Return $vStruct_Byte
    EndFunc ;==>_GDIPlus_BitmapToStructByte

    [/autoit]

    Wer ne Idee hat möge bitte helfen.

    MfG, campweb

    • Offizieller Beitrag

    Hey,

    Also bei mir klappt das so Wunderbar, bei mir kommt auch kein Auswahlfenster der Cam?
    Habe einach GuiSetState ausgeklammert ;)

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>
    #include <WinAPI.au3>
    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    PR()

    [/autoit] [autoit][/autoit] [autoit]

    Func PR()
    #region Constants
    $WM_CAP_START = 0x400
    $WM_CAP_UNICODE_START = $WM_CAP_START +100
    $WM_CAP_PAL_SAVEA = $WM_CAP_START + 81
    $WM_CAP_PAL_SAVEW = $WM_CAP_UNICODE_START + 81
    $WM_CAP_UNICODE_END = $WM_CAP_PAL_SAVEW
    $WM_CAP_ABORT = $WM_CAP_START + 69
    $WM_CAP_DLG_VIDEOCOMPRESSION = $WM_CAP_START + 46
    $WM_CAP_DLG_VIDEODISPLAY = $WM_CAP_START + 43
    $WM_CAP_DLG_VIDEOFORMAT = $WM_CAP_START + 41
    $WM_CAP_DLG_VIDEOSOURCE = $WM_CAP_START + 42
    $WM_CAP_DRIVER_CONNECT = $WM_CAP_START + 10
    $WM_CAP_DRIVER_DISCONNECT = $WM_CAP_START + 11
    $WM_CAP_DRIVER_GET_CAPS = $WM_CAP_START + 14
    $WM_CAP_DRIVER_GET_NAMEA = $WM_CAP_START + 12
    $WM_CAP_DRIVER_GET_NAMEW = $WM_CAP_UNICODE_START + 12
    $WM_CAP_DRIVER_GET_VERSIONA = $WM_CAP_START + 13
    $WM_CAP_DRIVER_GET_VERSIONW = $WM_CAP_UNICODE_START + 13
    $WM_CAP_EDIT_COPY = $WM_CAP_START + 30
    $WM_CAP_END = $WM_CAP_UNICODE_END
    $WM_CAP_FILE_ALLOCATE = $WM_CAP_START + 22
    $WM_CAP_FILE_GET_CAPTURE_FILEA = $WM_CAP_START + 21
    $WM_CAP_FILE_GET_CAPTURE_FILEW = $WM_CAP_UNICODE_START + 21
    $WM_CAP_FILE_SAVEASA = $WM_CAP_START + 23
    $WM_CAP_FILE_SAVEASW = $WM_CAP_UNICODE_START + 23
    $WM_CAP_FILE_SAVEDIBA = $WM_CAP_START + 25
    $WM_CAP_FILE_SAVEDIBW = $WM_CAP_UNICODE_START + 25
    $WM_CAP_FILE_SET_CAPTURE_FILEA = $WM_CAP_START + 20
    $WM_CAP_FILE_SET_CAPTURE_FILEW = $WM_CAP_UNICODE_START + 20
    $WM_CAP_FILE_SET_INFOCHUNK = $WM_CAP_START + 24
    $WM_CAP_GET_AUDIOFORMAT = $WM_CAP_START + 36
    $WM_CAP_GET_CAPSTREAMPTR = $WM_CAP_START + 1
    $WM_CAP_GET_MCI_DEVICEA = $WM_CAP_START + 67
    $WM_CAP_GET_MCI_DEVICEW = $WM_CAP_UNICODE_START + 67
    $WM_CAP_GET_SEQUENCE_SETUP = $WM_CAP_START + 65
    $WM_CAP_GET_STATUS = $WM_CAP_START + 54
    $WM_CAP_GET_USER_DATA = $WM_CAP_START + 8
    $WM_CAP_GET_VIDEOFORMAT = $WM_CAP_START + 44
    $WM_CAP_GRAB_FRAME = $WM_CAP_START + 60
    $WM_CAP_GRAB_FRAME_NOSTOP = $WM_CAP_START + 61
    $WM_CAP_PAL_AUTOCREATE = $WM_CAP_START + 83
    $WM_CAP_PAL_MANUALCREATE = $WM_CAP_START + 84
    $WM_CAP_PAL_OPENA = $WM_CAP_START + 80
    $WM_CAP_PAL_OPENW = $WM_CAP_UNICODE_START + 80
    $WM_CAP_PAL_PASTE = $WM_CAP_START + 82
    $WM_CAP_SEQUENCE = $WM_CAP_START + 62
    $WM_CAP_SEQUENCE_NOFILE = $WM_CAP_START + 63
    $WM_CAP_SET_AUDIOFORMAT = $WM_CAP_START + 35
    $WM_CAP_SET_CALLBACK_CAPCONTROL = $WM_CAP_START + 85
    $WM_CAP_SET_CALLBACK_ERRORA = $WM_CAP_START + 2
    $WM_CAP_SET_CALLBACK_ERRORW = $WM_CAP_UNICODE_START + 2
    $WM_CAP_SET_CALLBACK_FRAME = $WM_CAP_START + 5
    $WM_CAP_SET_CALLBACK_STATUSA = $WM_CAP_START + 3
    $WM_CAP_SET_CALLBACK_STATUSW = $WM_CAP_UNICODE_START + 3
    $WM_CAP_SET_CALLBACK_VIDEOSTREAM = $WM_CAP_START + 6
    $WM_CAP_SET_CALLBACK_WAVESTREAM = $WM_CAP_START + 7
    $WM_CAP_SET_CALLBACK_YIELD = $WM_CAP_START + 4
    $WM_CAP_SET_MCI_DEVICEA = $WM_CAP_START + 66
    $WM_CAP_SET_MCI_DEVICEW = $WM_CAP_UNICODE_START + 66
    $WM_CAP_SET_OVERLAY = $WM_CAP_START + 51
    $WM_CAP_SET_PREVIEW = $WM_CAP_START + 50
    $WM_CAP_SET_PREVIEWRATE = $WM_CAP_START + 52
    $WM_CAP_SET_SCALE = $WM_CAP_START + 53
    $WM_CAP_SET_SCROLL = $WM_CAP_START + 55
    $WM_CAP_SET_SEQUENCE_SETUP = $WM_CAP_START + 64
    $WM_CAP_SET_USER_DATA = $WM_CAP_START + 9
    $WM_CAP_SET_VIDEOFORMAT = $WM_CAP_START + 45
    $WM_CAP_SINGLE_FRAME = $WM_CAP_START + 72
    $WM_CAP_SINGLE_FRAME_CLOSE = $WM_CAP_START + 71
    $WM_CAP_SINGLE_FRAME_OPEN = $WM_CAP_START + 70
    $WM_CAP_STOP = $WM_CAP_START + 68
    $CAM_FILE = "Person.bmp"
    $CAM_AVI = DllOpen("avicap32.dll")
    $DLL_USER = DllOpen("user32.dll")
    $hMain = GUICreate("TLC Person Control", 341, 327, 413, 74)
    $CAM_CAPTURE = DllCall($CAM_AVI, "int", "capCreateCaptureWindow", "str", "cap", "int", BitOR($WS_CHILD,$WS_VISIBLE), "int", 10, "int", 20, "int", 320, "int", 240, "hwnd", $hMAIN, "int", 1)
    DllCall($DLL_USER, "int", "SendMessage", "hWnd", $CAM_CAPTURE[0], "int", $WM_CAP_DRIVER_CONNECT, "int", 0, "int", 0)
    DllCall($DLL_USER, "int", "SendMessage", "hWnd", $CAM_CAPTURE[0], "int", $WM_CAP_SET_SCALE, "int", 1, "int", 0)
    DllCall($DLL_USER, "int", "SendMessage", "hWnd", $CAM_CAPTURE[0], "int", $WM_CAP_SET_OVERLAY, "int", 1, "int", 0)
    DllCall($DLL_USER, "int", "SendMessage", "hWnd", $CAM_CAPTURE[0], "int", $WM_CAP_SET_PREVIEW, "int", 1, "int", 0)
    DllCall($DLL_USER, "int", "SendMessage", "hWnd", $CAM_CAPTURE[0], "int", $WM_CAP_SET_PREVIEWRATE, "int", 1, "int", 0)
    ;~ GUISetState()
    DllCall($DLL_USER, "int", "SendMessage", "hWnd", $CAM_CAPTURE[0], "int", $WM_CAP_GRAB_FRAME_NOSTOP, "int", 0, "int", 0)
    DllCall($DLL_USER, "int", "SendMessage", "hWnd", $CAM_CAPTURE[0], "int", $WM_CAP_FILE_SAVEDIBA, "int", 0, "str", "Person.bmp")
    ConsoleWrite(Persons())
    GUIDelete()
    EndFunc
    Func Persons()
    ;progandy, gtaspider
    $hOpen = DllOpen("fdlib.dll")
    _GDIPlus_Startup()
    $hbBMP = _GDIPlus_BitmapCreateFromFile(@ScriptDir & "\Person.bmp")
    $iWidth = _GDIPlus_ImageGetWidth($hbBMP)
    $iHeight = _GDIPlus_ImageGetHeight($hbBMP)
    $hBMP = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hbBMP)
    $iThreshold = Number(50)
    If $iThreshold < 1 Then $iThreshold = 1
    $vBMP = _GDIPlus_BitmapToStructByte($hBMP, $iWidth, $iHeight)
    DllCall($hOpen, "int:cdecl", "fdlib_detectfaces", "ptr", DllStructGetPtr($vBMP), "int", $iWidth, "int", $iHeight, "int", $iThreshold)
    $nFace = DllCall($hOpen, "int:cdecl", "fdlib_getndetections")
    If Not @error Then
    $Faces = $nFace[0]
    Return $Faces
    Else
    Return 0
    SetError(1,1,1)
    EndIf
    DllClose($hOpen)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _GDIPlus_BitmapToStructByte($hBMP, $iW, $iH)
    Local $x, $y, $z, $sErrorHandlerString, $hDC, $hDC_tmp, $hBitmap, $vStruct_Byte, $vStruct_BMPInfo

    [/autoit] [autoit][/autoit] [autoit]

    Local $hBitmap = DllCall("User32.dll", "hwnd", "CopyImage", "hwnd", $hBMP, "int", 0, "int", 0, "int", 0, "int", 1);LR_MONOCHROME
    If @error Then Return SetError(1, 0, _WinAPI_GetLastErrorMessage())
    $hBitmap = $hBitmap[0]

    [/autoit] [autoit][/autoit] [autoit]

    $vStruct_Byte = DllStructCreate("byte graydata[" & $iW * $iH & "]")

    [/autoit] [autoit][/autoit] [autoit]

    Local $vStruct_BMPInfo = DllStructCreate("dword;long;long;ushort;ushort;dword;dword;long;long;dword;dword;dword RGBQuad[256];")
    $hDC_tmp = _WinAPI_GetDC(_WinAPI_GetDesktopWindow())
    $hDC = _WinAPI_CreateCompatibleDC($hDC_tmp)
    _WinAPI_ReleaseDC(0, $hDC_tmp)
    Local $hBitmapOld = _WinAPI_SelectObject($hDC, $hBitmap)

    [/autoit] [autoit][/autoit] [autoit]

    DllStructSetData($vStruct_BMPInfo, 1, DllStructGetSize(DllStructCreate("dword;long;long;ushort;ushort;dword;dword;long;long;dword;dword;", 1)))
    DllStructSetData($vStruct_BMPInfo, 2, $iW)
    DllStructSetData($vStruct_BMPInfo, 3, $iH * - 1)
    DllStructSetData($vStruct_BMPInfo, 4, 1)
    DllStructSetData($vStruct_BMPInfo, 5, 1)

    [/autoit] [autoit][/autoit] [autoit]

    _WinAPI_GetDIBits($hDC, $hBitmap, 0, $iH, DllStructGetPtr($vStruct_Byte), DllStructGetPtr($vStruct_BMPInfo), 0)

    [/autoit] [autoit][/autoit] [autoit]

    _WinAPI_DeleteObject(_WinAPI_SelectObject($hDC, $hBitmapOld))
    _WinAPI_DeleteDC($hDC)

    [/autoit] [autoit][/autoit] [autoit]

    Return $vStruct_Byte
    EndFunc ;==>_GDIPlus_BitmapToStructByte

    [/autoit]

    Gruß
    Spider

  • Hi, ich denke, dass du das etwas umstrukturieren solltest, z.B.:
    capCreateCaptureWindo
    -> Framecallback setzen
    -> WM_CAP_SET_SEQUENCE_SETUP, setze Framerate zu 2 Bilder/Sekunde oder so
    -> WM_CAP_SEQUENCE_NOFILE
    -> im Callback Bild bearbeiten.

  • Huch, so vertraut bin ich mit der webcam UDF jetzt auch ncoh nicht, kannst du das bitte mal näher beschreiben?

    MFG, campweb

  • Ja die Geeks werden erkannt, die Mädels aber nicht mehr. Egal wie viele /wer vor der Cam steht, immer sinds 0.
    Irgendein Lösungsvorschlag?

    MfG, campweb

  • Huch, so vertraut bin ich mit der webcam UDF jetzt auch ncoh nicht, kannst du das bitte mal näher beschreiben?

    MFG, campweb

    Baue die Funktion auseinander:
    - Am Anfang deines Skripts erstellst du das Fenster
    - Dann setzt du ein Callback für WM_CAP_SET_CALLBACK_VIDEOSTREAM
    - Per WM_CAP_SET_SEQUENCE_SETUP setzt du die Aufnahmeoptionen wie z.B. Framerate
    - Dann startest du per WM_CAP_SEQUENCE_NOFILE die Aufnahme. Du bekommst die Bilder als Binärdaten an das Callback geliefert
    - Dort bearbeitest du das Bild
    - Wenn du fertig bist, die Aufnahme per WM_CAP_ABORT

    In der MSDN kannst du hier anfangen zu lesen:
    http://msdn.microsoft.com/en-us/library/…28VS.85%29.aspx
    Ohne Webcam ist das etwas schwer ^^