WebCam Capture erzeugt nur schwarzes Bild



  • Hallo,
    ich habe mir ein kleines Programm geschrieben, um die WebCam meines Notebooks anzuzeigen.

    hWndCam=capCreateCaptureWindow("Meine WebCam", WS_CHILD | WS_VISIBLE, 5 , 5, 320, 240, Handle, 1);
    capDriverConnect(hWndCam,0);
    capPreviewRate(hWndCam, 66);
    capPreview(hWndCam, true);
    

    Nach dem Start wird auf meiner Form ein kleiner Bereich erzeugt, der das Bild der Cam anzeigen sollte. Leider bleibt dieser schwarz. Die LED an meiner WebCam schaltet sich nach dem Start allerdings an. Ich habe auch die Cam mit Skype getestet. Dort wird mir das Bild korrekt angezeigt. Daher würde ich jetzt vermuten, dass es an meinem Code liegt.
    Hat jemand eine Idee woran???

    Danke
    Torsten



  • Wenn ich mir Beispielcode im Netz anschaue, wird dort das Overlay ggf. aktiviert.
    In der Reihenfolge:

    DRIVER_CONNECT
    SET_PREVIEWRATE
    SET_OVERLAY
    SET_PREVIEW
    


  • Habe das Prüfen des Overlays eingebunden:

    hWndCam = capCreateCaptureWindowA("Meine WebCam", WS_CHILD | WS_VISIBLE, 5 , 5, 240, 160, Handle, 1);
    capDriverConnect(hWndCam,0);
    capPreviewRate(hWndCam, 66);
    
    CAPDRIVERCAPS CapDrvCaps;
    capDriverGetCaps(hWndCam, &CapDrvCaps, sizeof (CAPDRIVERCAPS));
    if (CapDrvCaps.fHasOverlay)
    	capOverlay(hWndCam, TRUE);
    
    capPreview(hWndCam, true);
    

    Ohne Erfolg. Das Bild bleibt schwarz...



  • @torsten_156 Das wird dir zwar nicht unbedingt helfen, aber auf meinem Notebook klappt es, wenn ich den Code (Konsolenanwendung) einfüge und eine Nachrichtenschleife einbaue (an diesem PC habe ich keine Cam).

    Edit: Win10 x64, Cam halt so ein eingebautes Ding...



  • @yahendrik Wenn ich das Programm compiliere und es auf einem WIN-Tablet laufen lasse, wird ein Bild angezeigt. Ich vermute mal das es mit dem Treiber am Notebook zusammen hängt. Ich prüfe das mal weiter...

    Danke dir...



  • So, habe jetzt mal weiter getestet. Am Notebook ist eine Logitech HD-Cam per USB angeschlossen. Diese möchte ich jetzt ansprechen.
    Ich versuche jetzt mich mit dem Treiber der Cam zu verbinden:

    	if(!capDriverConnect(hwndCam, 0)) {
    			MessageBox(Handle, "Treiber für die Webcam kann nicht geladen werden...", "Fehler", MB_ICONERROR);
    			return;
    	}
    
    

    Leider ohne Erfolg. Obwohl er mir mit Index 0 den Treiber "Microsoft WDM Image Capture..." zurück gibt und ich es mit diesem Index versuche, klappt es einfach nicht!

    Hier mal der gesamte Code:

    #include <vcl.h>
    #pragma hdrstop
    
    #include "UnMain.h"
    #include <windows.h>
    #include <vfw.h>
    
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    
    TFMain *FMain;
    CAPDRIVERCAPS CapDrvCaps;
    HWND hwndCam;
    
    //---------------------------------------------------------------------------
    __fastcall TFMain::TFMain(TComponent* Owner)
    	: TForm(Owner)
    {
    
    
    }
    //---------------------------------------------------------------------------
    void __fastcall TFMain::BCam_oeffnenClick(TObject *Sender)
    {
    
    hwndCam = capCreateCaptureWindow((LPSTR) "My Capture Window", WS_CHILD | WS_VISIBLE , 0, 0, 200, 200, Handle, 1) ;
    
    capDriverGetCaps(hwndCam, &CapDrvCaps, sizeof (CAPDRIVERCAPS));
    	if (CapDrvCaps.fHasOverlay)
    		capOverlay(hwndCam, TRUE);
    
    
    	if(!capDriverConnect(hwndCam, 0)) {
    			MessageBox(Handle, "Treiber für die Webcam kann nicht geladen werden...", "Fehler", MB_ICONERROR);
    			return;
    	}
    
    
    
    	capPreviewRate (hwndCam, 33.3);
    	capPreview (hwndCam, TRUE);
    
    
    }
    ```cpp
    
    


  • Habe jetzt die Information, dass es einen Dialog gibt, mit dem man die Videoquelle auswählen kann. Diese Zeile sollte den Dialog erzeugen:

    	bool pp = capDlgVideoSource(hwndVideo);
    

    Tut es aber leider nicht! Auf einem äleteren Notebook öffnet sich dieser aber. Muss also in irgend einer Weise mit WIN10 zusammen hängen! Hat jemand eine Idee???

    Gruß
    Torsten



  • Bin ein Stück weiter gekommen. Also, wenn ich aus dem Projekt ein Release erstelle und dieses Release starte, erhalte ich den Source-Dialog. Dort wähle ich die CAM aus und das Bid ist da.

    Lediglich im Debug-Modus der IDE erscheint der Source-Dialog nicht! Hat jemand eine Idee warum nicht???

    Gruß
    Torsten