Page 1 sur 1

Capture Webcam ne fonctionne pas

Publié : ven. 26/nov./2021 17:11
par Ekim
Bonjours à tous

J'ai un souci avec ce code, il refuse de fonction, je voulais simplement capturer des photos via ma webcam usb

Quelqu'un peut me dire ce qui ne fonctionne pas s'il vous plait?

Code : Tout sélectionner

#WM_CAP_START = #WM_USER

#WM_CAP_SET_CALLBACK_YIELD = #WM_CAP_START + 4
#WM_CAP_SET_CALLBACK_FRAME = #WM_CAP_START + 5
#WM_CAP_SET_CALLBACK_VIDEOSTREAM = #WM_CAP_START + 6
#WM_CAP_SET_CALLBACK_WAVESTREAM = #WM_CAP_START + 7

#WM_CAP_DRIVER_CONNECT        =  #WM_USER + 10
#WM_CAP_DRIVER_DISCONNECT     =  #WM_USER + 11
#WM_CAP_DRIVER_GET_CAPS = #WM_CAP_START + 14

#WM_CAP_DLG_VIDEOFORMAT = #WM_CAP_START + 41
#WM_CAP_DLG_VIDEOSOURCE = #WM_CAP_START + 42
#WM_CAP_DLG_VIDEODISPLAY = #WM_CAP_START + 43

#WM_CAP_SET_PREVIEW = #WM_CAP_START + 50
#WM_CAP_SET_PREVIEWRATE = #WM_CAP_START + 52
#WM_CAP_GET_STATUS = #WM_CAP_START + 54

#WM_CAP_SET_SCALE             =  #WM_USER + 53

#WM_CAP_SET_CALLBACK_CAPCONTROL = #WM_CAP_START + 85

Structure VIDEOHDR
    lpData.l
    dwBufferLength.l
    dwBytesUsed.l
    dwTimeCaptured.l
    dwUser.l
    dwFlags.l
    dwReserved.l[3]
EndStructure


Procedure FrameCallback(lwnd.l, *lpVHdr.VIDEOHDR)

    For k=0 To *lpVHdr\dwBufferLength-1
        Color = PeekB(*lpVHdr\lpData+k)
        
        PokeB(*lpVHdr\lpData+k, RGB(Blue(Color), Green(Color), Red(Color)))
    Next
    
EndProcedure


hWnd = OpenWindow(0, 0, 0, 400, 500, "WebCamTest", #PB_Window_SystemMenu)

If OpenLibrary(0, "AVICAP32.DLL")
    hWebcam = CallFunction(0, "capCreateCaptureWindowA", 0, #WS_VISIBLE + #WS_CHILD, 10, 10, 380, 380, hWnd, 0)

    CallFunction(0, "capSetCallbackOnFrame", hWebcam, @FrameCallback())

    SendMessage_(hWebcam, #WM_CAP_DRIVER_CONNECT          , 0 , 0)
    SendMessage_(hWebcam, #WM_CAP_SET_SCALE               , 1 , 0)
    SendMessage_(hWebcam, #WM_CAP_SET_PREVIEWRATE         , 50, 0)
    SendMessage_(hWebcam, #WM_CAP_SET_PREVIEW             , 1 , 0)

    SendMessage_(hWebcam, #WM_CAP_SET_CALLBACK_FRAME      , 0 , @FrameCallback())

    Repeat
        Event = WindowEvent()
            Select Event
                Case #PB_Event_CloseWindow
                    Quit = 1
            EndSelect
    Until Quit = 1
  
    SendMessage_(hWebcam, #WM_CAP_SET_PREVIEW       , 0, 0)
    SendMessage_(hWebcam, #WM_CAP_DRIVER_DISCONNECT, "BLUBBER", 0)
    CloseWindow(0)
    CloseLibrary(0)
EndIf
Merci pour votre aide :wink:

Re: Capture Webcam ne fonctionne pas

Publié : ven. 26/nov./2021 23:08
par Ar-S
Chez moi il fonctionne. Du moins je vois ma tête..
Après faut que tu sauvegardes l'image.. Ce que tu ne fais nul part.
J'ai pas le courage de me plongé dans les API maintenant ni de regarder les commandes d'AVICAP32.DLL..
Ce que tu peux faire, c'est ajouter un raccourcis clavier genre "F3" ou un bouton qui ferait un screenshot de ta fenêtre.
Une fois dans le presse papier à toi d'en faire ce que tu veux

Code : Tout sélectionner

Procedure CapturePic()
;Ar-S
; Capture image fenêtre active.
keybd_event_(#VK_SNAPSHOT,1,0,0) 
keybd_event_(#VK_SNAPSHOT,0,#KEYEVENTF_KEYUP,0)
EndProcedure
---edit---
La commande pour copier l'image de la cam en clipboard c'est

Code : Tout sélectionner

SendMessage_(hWndC, #WM_CAP_EDIT_COPY, 0, 0)
; apres tu récupères en pb
snapshot = GetClipboardImage(#PB_Any)
; Apres tu sauves via saveimage

Re: Capture Webcam ne fonctionne pas

Publié : sam. 27/nov./2021 3:30
par Ekim
Trop cool)

Merci @Ar-s pour l'idée du Screenshot, même si j'aurais souhaité récupérer le plein format de la capture, mais c'est quant même une bonne entrée en matière une fois que j'aurais trouvé la panne :D

Re: Capture Webcam ne fonctionne pas

Publié : sam. 27/nov./2021 12:24
par Ar-S
la 2ere solution ne capture que l'image ;)