DllStructCreate & $WM_CAP_SET_VIDEOFORMAT

  • Hallo

    diesmal kämpfe ich mit einem sehr komlizierten problem:

    ich will die auflösung meiner webcam via script ändern.
    lt microsoft geht das mit WM_CAP_SET_VIDEOFORMAT:

    Code
    WM_CAP_SET_VIDEOFORMAT 
    wParam = (WPARAM) (wSize); 
    lParam = (LPARAM) (LPVOID) (psVideoFormat);
    
    
    psVideoFormat = Pointer to a BITMAPINFO structure.

    BITMAPINFO

    Code
    typedef struct tagBITMAPINFO { 
      BITMAPINFOHEADER bmiHeader; 
      RGBQUAD          bmiColors[1]; 
    } BITMAPINFO, *PBITMAPINFO;

    BITMAPINFOHEADER

    RGBQUAD

    Code
    typedef struct tagRGBQUAD {
      BYTE    rgbBlue; 
      BYTE    rgbGreen; 
      BYTE    rgbRed; 
      BYTE    rgbReserved; 
    } RGBQUAD;

    ich hab das jetzt mal so probiert:

    Spoiler anzeigen
    [autoit]

    $BITMAPINFO = DllStructCreate("ptr BITMAPINFOHEADER;ptr RGBQUAD")
    $BITMAPINFOHEADER = DllStructCreate("DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant")
    $RGBQUAD = DllStructCreate("BYTE rgbBlue; BYTE rgbGreen; BYTE rgbRed; BYTE rgbReserved")

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

    DllStructSetData($BITMAPINFOHEADER, "biSize", DllStructGetSize($BITMAPINFOHEADER))
    DllStructSetData($BITMAPINFOHEADER, "biWidth", 640)
    DllStructSetData($BITMAPINFOHEADER, "biHeight", 480)
    DllStructSetData($BITMAPINFOHEADER, "biPlanes", 1)
    DllStructSetData($BITMAPINFOHEADER, "biBitCount", 8)
    DllStructSetData($BITMAPINFOHEADER, "biCompression", 0)
    DllStructSetData($BITMAPINFOHEADER, "biSizeImage", 0)
    DllStructSetData($BITMAPINFOHEADER, "biXPelsPerMeter", 0)
    DllStructSetData($BITMAPINFOHEADER, "biYPelsPerMeter", 0)
    DllStructSetData($BITMAPINFOHEADER, "biClrUsed", 0)
    DllStructSetData($BITMAPINFOHEADER, "biClrImportant", 0)

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

    DllStructSetData($RGBQUAD, "rgbBlue", 0)
    DllStructSetData($RGBQUAD, "rgbGreen", 0)
    DllStructSetData($RGBQUAD, "rgbRed", 0)
    DllStructSetData($RGBQUAD, "rgbReserved", 0)

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

    DllStructSetData($BITMAPINFO, "BITMAPINFOHEADER", DllStructGetPtr($BITMAPINFOHEADER))
    DllStructSetData($BITMAPINFO, "RGBQUAD", DllStructGetPtr($RGBQUAD))

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

    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_VIDEOFORMAT, "wparam", DllStructGetSize($BITMAPINFO), "lparam", DllStructGetPtr($BITMAPINFO))

    [/autoit]

    das ganze im audoit-gängigen webcamscript:

    Spoiler anzeigen
    [autoit]

    $BITMAPINFO = DllStructCreate("ptr BITMAPINFOHEADER;ptr RGBQUAD")
    $BITMAPINFOHEADER = DllStructCreate("DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant")
    $RGBQUAD = DllStructCreate("BYTE rgbBlue; BYTE rgbGreen; BYTE rgbRed; BYTE rgbReserved")

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

    DllStructSetData($BITMAPINFOHEADER, "biSize", DllStructGetSize($BITMAPINFOHEADER))
    DllStructSetData($BITMAPINFOHEADER, "biWidth", 640)
    DllStructSetData($BITMAPINFOHEADER, "biHeight", 480)
    DllStructSetData($BITMAPINFOHEADER, "biPlanes", 1)
    DllStructSetData($BITMAPINFOHEADER, "biBitCount", 8)
    DllStructSetData($BITMAPINFOHEADER, "biCompression", 0)
    DllStructSetData($BITMAPINFOHEADER, "biSizeImage", 0)
    DllStructSetData($BITMAPINFOHEADER, "biXPelsPerMeter", 0)
    DllStructSetData($BITMAPINFOHEADER, "biYPelsPerMeter", 0)
    DllStructSetData($BITMAPINFOHEADER, "biClrUsed", 0)
    DllStructSetData($BITMAPINFOHEADER, "biClrImportant", 0)

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

    DllStructSetData($RGBQUAD, "rgbBlue", 0)
    DllStructSetData($RGBQUAD, "rgbGreen", 0)
    DllStructSetData($RGBQUAD, "rgbRed", 0)
    DllStructSetData($RGBQUAD, "rgbReserved", 0)

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

    DllStructSetData($BITMAPINFO, "BITMAPINFOHEADER", DllStructGetPtr($BITMAPINFOHEADER))
    DllStructSetData($BITMAPINFO, "RGBQUAD", DllStructGetPtr($RGBQUAD))

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

    $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
    #include <GUIConstants.au3>
    $avi = DllOpen("avicap32.dll")
    $user = DllOpen("user32.dll")
    $Main = GUICreate("Camera", 350, 270)
    $cap = DllCall($avi, "int", "capCreateCaptureWindow", "str", "cap", "int", BitOR($WS_CHILD, $WS_VISIBLE), "int", 15, "int", 15, "int", 320, "int", 240, "hwnd", $Main, "int", 1)
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_DRIVER_CONNECT, "int", 0, "int", 0)
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_SCALE, "int", 1, "int", 0)
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_OVERLAY, "int", 1, "int", 0)
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_PREVIEW, "int", 1, "int", 0)
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_PREVIEWRATE, "int", 1, "int", 0)

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

    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_VIDEOFORMAT, "wparam", DllStructGetSize($BITMAPINFO), "lparam", DllStructGetPtr($BITMAPINFO))

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

    GUISetState(@SW_SHOW)
    While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_END, "int", 0, "int", 0)
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_DRIVER_DISCONNECT, "int", 0, "int", 0)
    DllClose($user)
    Exit
    EndIf
    Sleep(1)
    WEnd

    [/autoit]

    leider funktioniert das aber nicht!

    blickt da jemand durch und weiß, wo der fehler liegt?!?

    ich bin zumindest mit meinem latein am ende;)

    thx
    eukalyptus

  • Hi,

    versuch's mal so ...

    Spoiler anzeigen
    [autoit]

    $tagBITMAPINFO = 'ptr BITMAPINFOHEADER;' & _
    'ptr RGBQUAD')

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

    $tagBITMAPINFOHEADER = 'dword biSize;' & _
    'long biWidth;' & _
    'long biHeight;' & _
    'ushort biPlanes;' & _ ; WORD ist ein ulong
    'ushort biBitCount;' & _ ; WORD ist ein ulong
    'dword biCompression;' & _
    'dword biSizeImage;' & _
    'long biXPelsPerMeter;' & _
    'long biYPelsPerMeter;' & _
    'dword biClrUsed;' & _
    'dword biClrImportant'

    $tagRGBQUAD = 'byte rgbBlue;' & _
    'byte rgbGreen;' & _
    'byte rgbRed;' & _
    'byte rgbReserved'

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

    DllStructSetData($BITMAPINFOHEADER, 'biSize', DllStructGetSize($BITMAPINFOHEADER))
    DllStructSetData($BITMAPINFOHEADER, 'biWidth', 640)
    DllStructSetData($BITMAPINFOHEADER, 'biHeight', 480)
    DllStructSetData($BITMAPINFOHEADER, 'biPlanes', 1)
    DllStructSetData($BITMAPINFOHEADER, 'biBitCount', 8)
    DllStructSetData($BITMAPINFOHEADER, 'biCompression', 0)
    DllStructSetData($BITMAPINFOHEADER, 'biSizeImage', 0)
    DllStructSetData($BITMAPINFOHEADER, 'biXPelsPerMeter', 0)
    DllStructSetData($BITMAPINFOHEADER, 'biYPelsPerMeter', 0)
    DllStructSetData($BITMAPINFOHEADER, 'biClrUsed', 0)
    DllStructSetData($BITMAPINFOHEADER, 'biClrImportant', 0)

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

    DllStructSetData($RGBQUAD, 'rgbBlue', 0)
    DllStructSetData($RGBQUAD, 'rgbGreen', 0)
    DllStructSetData($RGBQUAD, 'rgbRed', 0)
    DllStructSetData($RGBQUAD, 'rgbReserved', 0)

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

    DllStructSetData($BITMAPINFO, 'BITMAPINFOHEADER', DllStructGetPtr($BITMAPINFOHEADER))
    DllStructSetData($BITMAPINFO, 'RGBQUAD', DllStructGetPtr($RGBQUAD))

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

    DllCall($user, 'int', 'SendMessage', _
    'hWnd', $cap[0], _
    'int', $WM_CAP_SET_VIDEOFORMAT, _
    'wparam', DllStructGetSize($BITMAPINFO), _
    'lparam', DllStructGetPtr($BITMAPINFO))

    [/autoit]


    Gruß
    Greenhorn

    EDIT:
    Ich sehe gerade den Fehler. Deine tagBITMAPINFO ist falsch !
    Einen Moment, bitte ...


  • So, noch einmal berichtigt ...

    Spoiler anzeigen
    [autoit]

    $tagBITMAPINFOHEADER = 'dword biSize;' & _
    'long biWidth;' & _
    'long biHeight;' & _
    'ushort biPlanes;' & _ ; WORD ist ein ulong
    'ushort biBitCount;' & _ ; WORD ist ein ulong
    'dword biCompression;' & _
    'dword biSizeImage;' & _
    'long biXPelsPerMeter;' & _
    'long biYPelsPerMeter;' & _
    'dword biClrUsed;' & _
    'dword biClrImportant'

    $tagRGBQUAD = 'byte rgbBlue;' & _
    'byte rgbGreen;' & _
    'byte rgbRed;' & _
    'byte rgbReserved'

    $tagBITMAPINFO = $tagBITMAPINFOHEADER & $tagBITMAPINFOHEADER
    ;;;

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

    DllStructCreate($tagBITMAPINFOHEADER)

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

    DllStructSetData($tagBITMAPINFOHEADER, 'biSize', DllStructGetSize($BITMAPINFOHEADER))
    DllStructSetData($tagBITMAPINFOHEADER, 'biWidth', 640)
    DllStructSetData($tagBITMAPINFOHEADER, 'biHeight', 480)
    DllStructSetData($tagBITMAPINFOHEADER, 'biPlanes', 1)
    DllStructSetData($tagBITMAPINFOHEADER, 'biBitCount', 8)
    DllStructSetData($tagBITMAPINFOHEADER, 'biCompression', 0)
    DllStructSetData($tagBITMAPINFOHEADER, 'biSizeImage', 0)
    DllStructSetData($tagBITMAPINFOHEADER, 'biXPelsPerMeter', 0)
    DllStructSetData($tagBITMAPINFOHEADER, 'biYPelsPerMeter', 0)
    DllStructSetData($tagBITMAPINFOHEADER, 'biClrUsed', 0)
    DllStructSetData($tagBITMAPINFOHEADER, 'biClrImportant', 0)

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

    DllStructCreate($tagRGBQUAD)

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

    DllStructSetData($tagRGBQUAD, 'rgbBlue', 0)
    DllStructSetData($tagRGBQUAD, 'rgbGreen', 0)
    DllStructSetData($tagRGBQUAD, 'rgbRed', 0)
    DllStructSetData($tagRGBQUAD, 'rgbReserved', 0)

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

    DllStructCreate($tagBITMAPINFO) ; nachdem Du die beiden anderen Strukturen ausgefüllt hast.

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

    DllStructSetData($tagBITMAPINFO, 'BITMAPINFOHEADER', DllStructGetPtr($BITMAPINFOHEADER))
    DllStructSetData($tagBITMAPINFO, 'RGBQUAD', DllStructGetPtr($RGBQUAD))

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

    DllCall($user, 'int', 'SendMessage', _
    'hWnd', $cap[0], _
    'int', $WM_CAP_SET_VIDEOFORMAT, _
    'wparam', DllStructGetSize($BITMAPINFO), _
    'lparam', DllStructGetPtr($BITMAPINFO))

    [/autoit]

    ... ungetestet, aber so irgendwie musst Du es machen.


    Gruß
    Greenhorn


  • Sorry, muss mich noch einmal berichtigen ... (Grund steht im Script :D )

    Spoiler anzeigen
    [autoit]

    $tagBITMAPINFOHEADER = 'dword biSize;' & _
    'long biWidth;' & _
    'long biHeight;' & _
    'ushort biPlanes;' & _ ; WORD ist ein ulong
    'ushort biBitCount;' & _ ; WORD ist ein ulong
    'dword biCompression;' & _
    'dword biSizeImage;' & _
    'long biXPelsPerMeter;' & _
    'long biYPelsPerMeter;' & _
    'dword biClrUsed;' & _
    'dword biClrImportant'

    $tagRGBQUAD = 'byte rgbBlue;' & _
    'byte rgbGreen;' & _
    'byte rgbRed;' & _
    'byte rgbReserved'

    $tagBITMAPINFO = $tagBITMAPINFOHEADER & $tagBITMAPINFOHEADER
    ;;;

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

    DllStructCreate($tagBITMAPINFOHEADER)

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

    DllStructSetData($tagBITMAPINFOHEADER, 'biSize', DllStructGetSize($BITMAPINFOHEADER))
    DllStructSetData($tagBITMAPINFOHEADER, 'biWidth', 640)
    DllStructSetData($tagBITMAPINFOHEADER, 'biHeight', 480)
    DllStructSetData($tagBITMAPINFOHEADER, 'biPlanes', 1)
    DllStructSetData($tagBITMAPINFOHEADER, 'biBitCount', 8)
    DllStructSetData($tagBITMAPINFOHEADER, 'biCompression', 0)
    DllStructSetData($tagBITMAPINFOHEADER, 'biSizeImage', 0)
    DllStructSetData($tagBITMAPINFOHEADER, 'biXPelsPerMeter', 0)
    DllStructSetData($tagBITMAPINFOHEADER, 'biYPelsPerMeter', 0)
    DllStructSetData($tagBITMAPINFOHEADER, 'biClrUsed', 0)
    DllStructSetData($tagBITMAPINFOHEADER, 'biClrImportant', 0)

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

    DllStructCreate($tagRGBQUAD)

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

    DllStructSetData($tagRGBQUAD, 'rgbBlue', 0)
    DllStructSetData($tagRGBQUAD, 'rgbGreen', 0)
    DllStructSetData($tagRGBQUAD, 'rgbRed', 0)
    DllStructSetData($tagRGBQUAD, 'rgbReserved', 0)

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

    DllStructCreate($tagBITMAPINFO) ; nachdem Du die beiden anderen Strukturen ausgefüllt hast.

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

    ; keine Ahnung, ob Du & oder + nehmen musst, bin jetzt zu sehr gebreitet ... ;)
    DllStructSetData($tagBITMAPINFO, DllStructGetData($BITMAPINFOHEADER) & DllStructGetData($RGBQUAD))

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

    DllCall($user, 'int', 'SendMessage', _
    'hWnd', $cap[0], _
    'int', $WM_CAP_SET_VIDEOFORMAT, _
    'wparam', DllStructGetSize($BITMAPINFO), _
    'lparam', DllStructGetPtr($BITMAPINFO))

    [/autoit]


  • Mir ist $tagRGBQUAD nicht ganz klar.
    Laut Definition muß $tagBITMAPINFOHEADER als letzten Parameter dword RGBQuad enthalten. :huh:

    Du meinst sicherlich die $tagBITMAPINFO !?! ^^

    Die enthält einmal die Struktur $tagBITMAPINFOHEADER und die $tagRGBQUAD

    Code
    typedef struct tagBITMAPINFO { 
      BITMAPINFOHEADER bmiHeader; 
      RGBQUAD          bmiColors[1]; 
    } BITMAPINFO, *PBITMAPINFO;

    ... oder was meinst Du ? ?(


  • erstmal danke für die hilfe (hab eigentlich gar nicht erwartet, daß ich für dieses problem antworten erhalte;)), leider will sich der erfolg noch nicht einstellen.

    hab momentan leider keine zeit zum testen und probieren, da ich z.z. etwas im streß bin...

    trotzdem mal dankeschön!

    • Offizieller Beitrag

    Hallo,

    Greenhorn, in deinem Code sind leider noch ein paar Fehler! ;)

    So sollte es gehen:

    Spoiler anzeigen
    [autoit]

    $tagBITMAPINFOHEADER = 'dword biSize;' & _
    'long biWidth;' & _
    'long biHeight;' & _
    'ushort biPlanes;' & _
    'ushort biBitCount;' & _
    'dword biCompression;' & _
    'dword biSizeImage;' & _
    'long biXPelsPerMeter;' & _
    'long biYPelsPerMeter;' & _
    'dword biClrUsed;' & _
    'dword biClrImportant'

    $tagRGBQUAD = 'byte rgbBlue;' & _
    'byte rgbGreen;' & _
    'byte rgbRed;' & _
    'byte rgbReserved'

    $tagBITMAPINFO = $tagBITMAPINFOHEADER & ";" & $tagRGBQUAD

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

    $tBMI = DllStructCreate($tagBITMAPINFO)

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

    DllStructSetData($tBMI, 'biSize', DllStructGetSize($tBMI) - 4) ; Anzahl der Bytes des BitmapInfoHeader = BitmapInfo - 4 Bytes von RGBQuad
    DllStructSetData($tBMI, 'biWidth', 640)
    DllStructSetData($tBMI, 'biHeight', 480)
    DllStructSetData($tBMI, 'biPlanes', 1)
    DllStructSetData($tBMI, 'biBitCount', 8)
    DllStructSetData($tBMI, 'biCompression', 0)
    DllStructSetData($tBMI, 'biSizeImage', 0)
    DllStructSetData($tBMI, 'biXPelsPerMeter', 0)
    DllStructSetData($tBMI, 'biYPelsPerMeter', 0)
    DllStructSetData($tBMI, 'biClrUsed', 0)
    DllStructSetData($tBMI, 'biClrImportant', 0)

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

    DllStructSetData($tBMI, 'rgbBlue', 0)
    DllStructSetData($tBMI, 'rgbGreen', 0)
    DllStructSetData($tBMI, 'rgbRed', 0)
    DllStructSetData($tBMI, 'rgbReserved', 0)

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

    DllCall($user, 'int', 'SendMessage', _
    'hWnd', $cap[0], _
    'int', $WM_CAP_SET_VIDEOFORMAT, _
    'wparam', DllStructGetSize($tBMI), _
    'lparam', DllStructGetPtr($tBMI))

    [/autoit]