Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Webcamaufnahme bei minimiertem Fenster.

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
20.10.2006, 13:07 Uhr
Schmuech



Hallo,

ich arbeite mit einer Klasse zur Aufname eines Webcam-Bildes aus dem Internet. Die Aufnahme funktioniert mit WinAPI und VfW. Leider wird die Aufnahme gestoppt, sobald ich das Formular, im welcher das Bild angezeigt wird minimiere oder ein anderes Programm in den Vordergrund hole. Von dem angezeigtem Bild wird alle 10 Sekunden ein Bitmap gespeichert.
Ist es möglich, diese Bildaufnahme auch durchzuführen, wenn das Formular der Webcam nicht den aktuellen Fokus hat?

Hier der Quelltext der Klasse:

Code:

#include <vcl.h>
#pragma hdrstop

#include <stdio.h>
#include "c_cap.h"
#include "Unit6.h"
#include "Unit1.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)

__fastcall TCap::TCap (HWND Handle)
{
        // create video capture window
        ParentHandle = Handle;
        hwndVideo = capCreateCaptureWindow(
                    (LPSTR) "My Capture Window",
                    WS_CHILD | WS_VISIBLE,
                    0, 0, 300, 200,
                    (HWND) Handle,
                    (int) 1);

        pStringCapDrivers = new TStringList;
        SelectedDevice = -1;
}


__fastcall TCap::~TCap ()
{

        delete pStringCapDrivers;

        capCaptureStop(hwndVideo);
        capPreview(hwndVideo, FALSE); // end preview
        capDriverConnect(hwndVideo, SelectedDevice);
        capDriverDisconnect(hwndVideo); // disconnect from driver
        capCaptureAbort(hwndVideo);
}

//---------------------------------------------------------------------------
// enumerate the installed capture drivers
//---------------------------------------------------------------------------
int TCap::EnumCapDrv ()
{
    char szDeviceName[80]; // driver name
    char szDeviceVersion[80]; // driver version
    char str[161]; // concatinated string
    int xcap; // counter

        xcap = 0;
        pStringCapDrivers->Clear ();
        do
        {
                if (capGetDriverDescription(xcap, szDeviceName, sizeof(szDeviceName),
                szDeviceVersion, sizeof(szDeviceVersion)))
                {
                        sprintf (str, "%s, %s", szDeviceName, szDeviceVersion);
                        pStringCapDrivers->AddObject (str, (TObject *)xcap);
                }
                else
                {
                        break;
                }
                xcap++;
        } while (true);

        return 0;
}

//---------------------------------------------------------------------------
//  connecting to selected device and starts preview
//---------------------------------------------------------------------------
void TCap::Connect (int Selected)
{
        CAPSTATUS CapStatus;
        int       hsize;

        // verbindet sich zum Treiber
        if (SelectedDevice != -1)
        {
        capPreview (hwndVideo, FALSE);
        capDriverConnect(hwndVideo, SelectedDevice);
        }

        if (!capDriverConnect(hwndVideo, Selected))
        {
        // Wenn keine Verbindung möglich -> Abbruch
        return;
        }

        // Die Treibereigenschaften werden neu geladen
        capDriverGetCaps (hwndVideo, sizeof(CAPDRIVERCAPS), &CapDrvCaps);

        capDlgVideoFormat(ParentHandle);

//-----------------------------------------------------------------------------

//**********Eigene Veränderungen an dem Header*********************************
//-----------------------------------------------------------------------------
        //Die Standarteinstellungen laden
    DWORD dwSize;                                                           // Länge der Formateigenschaften
    BITMAPINFO pbiInfo;                                                     // Bitmap-Eigenschaften der Datei

    dwSize=capGetVideoFormatSize(hwndVideo);                                // Messen der Länge


    capGetVideoFormat(hwndVideo, &pbiInfo, dwSize);                         // Momentane Formatierung laden

    // Einstellen der neuen Werte
    DWORD dwWidth,dwHeight,dwBPP;

        dwWidth=HOR;                                                            // Horizontale Auflösung
        dwHeight=VER;                                                           // Vertikale Auflösung
        dwBPP=24;                                                               // Farbtiefe

    pbiInfo.bmiHeader.biWidth = dwWidth;
    pbiInfo.bmiHeader.biHeight = dwHeight;
    pbiInfo.bmiHeader.biBitCount = (WORD) dwBPP;

    pbiInfo.bmiHeader.biSizeImage = 0;                                      // Größe der reservierten Bytes
    pbiInfo.bmiHeader.biCompression = BI_RGB;                               // Komprimierung (BI_RGB=keine Kompr.)
    pbiInfo.bmiHeader.biClrUsed = 0;                                        // Maximale Anzahl der dargestellten
    pbiInfo.bmiHeader.biClrImportant = 0;                                   // Farben, 0=alle Farben
    pbiInfo.bmiHeader.biPlanes = 1;                                         // Einstellung der Treiberebenen. Muss 1 sein

    pbiInfo.bmiColors->rgbBlue = 0;                                         // Eingabe der Farbverstärkung der
    pbiInfo.bmiColors->rgbGreen = 0;                                        // Grundfarben. 0=keine Verstärkung
    pbiInfo.bmiColors->rgbRed = 0;
    pbiInfo.bmiColors->rgbReserved = 0;                                     // Muss auf 0 gesetzt sein

    //Zurückschreiben zur API
    capSetVideoFormat(hwndVideo, &pbiInfo, dwSize);
//-----------------------------------------------------------------------------

        // Die neu eingestellte Bildgröße wird in den CapStatus geladen
        capGetStatus(hwndVideo, &CapStatus, sizeof(CAPSTATUS));

        hsize = GetSystemMetrics(SM_CYMENU);
        hsize += GetSystemMetrics(SM_CYCAPTION);

        // Das Anzeigefenster wird neu aufgebaut
        SetWindowPos(hwndVideo, NULL, 0, 0, CapStatus.uiImageWidth,
                CapStatus.uiImageHeight, SWP_NOZORDER | SWP_NOMOVE);
        SetWindowPos(ParentHandle, NULL, 0, hsize, CapStatus.uiImageWidth,
                CapStatus.uiImageHeight+hsize, SWP_NOZORDER | SWP_NOMOVE);

        // Stellt die Bildwiederholrate des Vorschaufensters ein
        capPreviewRate (hwndVideo, 33.3);

        // startet die Bildvorschau
        capPreview (hwndVideo, TRUE);

        // Das geöffnete Aufnahmegerät wird gespeichert
        SelectedDevice = Selected;

}

//---------------------------------------------------------------------------
//  Get access to the video source format box
//---------------------------------------------------------------------------
void TCap::Format ()
{
        int hsize;

        CAPSTATUS CapStatus;

        capDlgVideoFormat(hwndVideo);
        // Are there new image dimensions
        capGetStatus(hwndVideo, &CapStatus, sizeof(CAPSTATUS));

        hsize = GetSystemMetrics(SM_CYMENU);
        hsize += GetSystemMetrics(SM_CYCAPTION);

        SetWindowPos(ParentHandle, NULL, 0, hsize, CapStatus.uiImageWidth,
                CapStatus.uiImageHeight+hsize, SWP_NOZORDER | SWP_NOMOVE);
        SetWindowPos(hwndVideo, NULL, 0, 0, CapStatus.uiImageWidth,
                CapStatus.uiImageHeight, SWP_NOZORDER | SWP_NOMOVE);
}

//---------------------------------------------------------------------------
//  Get access to the video source dialog box
//---------------------------------------------------------------------------
void TCap::Source ()
{
        capDlgVideoSource(hwndVideo);
}

//---------------------------------------------------------------------------
//  capture a frame and save it
//---------------------------------------------------------------------------
void TCap::CaptureFrame (char *FileName)
{
        capFileSaveDIB (hwndVideo, FileName);
}
//---------------------------------------------------------------------------

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: