Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Advanced Developers Conference     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: VCL (C++ Builder) ::  Webcam Bild erzeugen/Lösungsansätze  
Gehen Sie zu Seite 1, 2  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
hat-schii
Mitglied

Benutzerprofil
Anmeldungsdatum: 24.02.2010
Beiträge: 6
Beitrag hat-schii Mitglied 10:28:33 26.02.2010   Titel:   Webcam Bild erzeugen/Lösungsansätze            Zitieren

Hey Leute,

wir müssen im Laufe unsere Projektwoche eine Dokumentenkamera erstellen. Dazu müssen wir über den Borland-Builder 2010 eine Webcam ansteuern. Das Problem dabei ist, dass unser Lehrer nicht gerade hilfreich ist. Wir haben bereits einen Blick auf das AllanPetersen WebCam Programm geworfen, jedoch konnten wir uns damit auch nicht helfen, da die Struckturanfänge für uns nicht ersichtlich sind.
Nun zu meiner Frage:
Wie steuert man die Webcam an, bzw. wie fängt man an ein Bild im Builder zu erzeugen? Eine Videoobjekt gibt es ja leider nicht.

Ich hoffe ihr könnt uns helfen( JA, SuFu wurde benutzt!)

LG
audacia
Mitglied

Benutzerprofil
Anmeldungsdatum: 05.02.2005
Beiträge: 3802
Beitrag audacia Mitglied 11:19:13 26.02.2010   Titel:              Zitieren

Eine Minute Google-Suche brachte mich zu ESCAPI - Extremely Simple Capture API:
Jari Komppa schrieb:
Simple DLL interface to use video capture devices (i.e. webcams), along with a simple example that uses SDL, as well as a couple even simpler examples that don't require SDL. 2.1 adds examples for BlitzMax, PureBasic, as well as a OpenGL-based "funny mirrors"-example. The only DLL change is that the 'alpha' bits now have value 0xff.
The DLL is free for anyone to use as long as I'm not held responsible for anything.


Das sollte helfen. Ansonsten: DirectShow direkt ansteuern.

_________________
"Hey, it compiles! Ship it!"
C++Builder Pages · Typsichere Format-Strings
kpeter
Mitglied

Benutzerprofil
Anmeldungsdatum: 06.09.2006
Beiträge: 919
Beitrag kpeter Mitglied 11:33:54 26.02.2010   Titel:              Zitieren

Hallo,

Allan Petersen hat mit der Version WebCam 2.1 ein sofort lauffähiges (zumindest BCB2009) Projekt ins Netz gestellt.
Solltet ihr diesen Link meinen :
http://allanpetersen.com/wp-content/plugins/download-monitor/download.php?id=10

dann habt ihr die beste Grundlage. Ansonsten Verständnisprobleme beheben ;)

mfg
kpeter
the_muck
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.02.2010
Beiträge: 1
Beitrag the_muck Mitglied 20:34:12 27.02.2010   Titel:              Zitieren

Hallo,
ich hänge mich einfach mal an das Thema ran, und zwar möchte ich "einfach" in das Webcam Bild bei der Software von Allan Petersen, WebCam 2.1, ein Fadenkreuz einblenden. Wenn möglich sollte dieses auch in X und Y Position verschiebbar sein und gegeben falls auch vergrößert und verkleinert werden...
Soweit habe ich C++ Builder und das Projekt am laufen, ich komme leider aus der Mikrocontroller Ecke und habe mit C++ und Konsorten noch nicht viel am Hut gehabt etwas Java das war es dann aber schon. Es gibt also noch reichlich Verständnis Probleme, ich werde mal schauen was es bei uns an der FH Literatur zum Thema gibt, aber die erste Frage wäre an diese Stelle ob es überhaupt Sinn macht die Software von Petersen an zu passen oder ob es der Flasche weg ist?!

Lg der Muck
kpeter
Mitglied

Benutzerprofil
Anmeldungsdatum: 06.09.2006
Beiträge: 919
Beitrag kpeter Mitglied 12:57:04 01.03.2010   Titel:              Zitieren

the_muck schrieb:
Hallo,
...in das Webcam Bild bei der Software von Allan Petersen, WebCam 2.1, ein Fadenkreuz einblenden.


Ist möglich, indem du auf den Device Context des CaptureWindow innerhalb der WM_TIMER Botschaft zeichnest.
An diese WM_TIMER kommst du über Application->OnMessage heran.

Dazu wird immer die aktuelle Cursorposition abgefragt.

mfg
kpeter
hat-schii
Mitglied

Benutzerprofil
Anmeldungsdatum: 24.02.2010
Beiträge: 6
Beitrag hat-schii Mitglied 15:30:16 02.03.2010   Titel:              Zitieren

Vielen Dank für die Hilfe soweit!

Haben inzwischen ein Bild bekommen! Und zwar:

Code:
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TDokuCam::FormCreate(TObject *Sender)
{
  HWND hWebcam;
  HWND hwnd = web_bild->Handle;    //Handel vom Panel -> darauf wird der Webcam Stream gelegt

  hWebcam = capCreateCaptureWindow("Capture Window", WS_CHILD | WS_VISIBLE,0, 0, web_bild->Width, web_bild->Height,hwnd, 0);

  SendMessage(hWebcam, WM_CAP_DRIVER_CONNECT,0, 0);
  SendMessage(hWebcam, WM_CAP_SET_SCALE,1, 0);
  SendMessage(hWebcam, WM_CAP_SET_PREVIEWRATE,10,0);
  SendMessage(hWebcam, WM_CAP_SET_PREVIEW,1,0);
Code:
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TDokuCam::FormCreate(TObject *Sender)
{
HWND hWebcam;
HWND hwnd = web_bild->Handle; //Handel vom Panel -> darauf wird der Webcam Stream gelegt

hWebcam = capCreateCaptureWindow("Capture Window", WS_CHILD | WS_VISIBLE,0, 0, web_bild->Width, web_bild->Height,hwnd, 0);

SendMessage(hWebcam, WM_CAP_DRIVER_CONNECT,0, 0);
SendMessage(hWebcam, WM_CAP_SET_SCALE,1, 0);
SendMessage(hWebcam, WM_CAP_SET_PREVIEWRATE,10,0);
SendMessage(hWebcam, WM_CAP_SET_PREVIEW,1,0);
Code:
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TDokuCam::FormCreate(TObject *Sender)
{
  HWND hWebcam;
  HWND hwnd = web_bild->Handle;    //Handel vom Panel -> darauf wird der Webcam Stream gelegt

  hWebcam = capCreateCaptureWindow("Capture Window", WS_CHILD | WS_VISIBLE,0, 0, web_bild->Width, web_bild->Height,hwnd, 0);

  SendMessage(hWebcam, WM_CAP_DRIVER_CONNECT,0, 0);
  SendMessage(hWebcam, WM_CAP_SET_SCALE,1, 0);
  SendMessage(hWebcam, WM_CAP_SET_PREVIEWRATE,10,0);
  SendMessage(hWebcam, WM_CAP_SET_PREVIEW,1,0);


Jedoch zum nächsten Problem :(
Sobald wir die Größe von dem Fenster ändern, bleibt das Video so bestehen wie es ist. Das Panel lässt sich bereits in der Größe verändern, jedoch nicht das Videobild. Wie kann ich nachträglich auf die Größe von dem Videohandle zugreifen? Mit hWebcam->Height geht das ja nicht.
Nochmal der Code zum Panel:
Code:
void __fastcall TDokuCam::FormResize(TObject *Sender)
{
web_bild->Height=DokuCam->ClientHeight-40;
web_bild->Width=DokuCam->ClientWidth-160;
}
Code:
void __fastcall TDokuCam::FormResize(TObject *Sender)
{
web_bild->Height=DokuCam->ClientHeight-40;
web_bild->Width=DokuCam->ClientWidth-160;
}
Code:
void __fastcall TDokuCam::FormResize(TObject *Sender)
{
web_bild->Height=DokuCam->ClientHeight-40;
web_bild->Width=DokuCam->ClientWidth-160;
}
DocShoe
Mitglied

Benutzerprofil
Anmeldungsdatum: 02.04.2008
Beiträge: 1483
Beitrag DocShoe Mitglied 15:53:27 02.03.2010   Titel:              Zitieren

SetWindowPos und SetWindowPosition aus der Win32 API sollten gehen.
hat-schii
Mitglied

Benutzerprofil
Anmeldungsdatum: 24.02.2010
Beiträge: 6
Beitrag hat-schii Mitglied 09:04:21 10.03.2010   Titel:              Zitieren

Haben es mit der SetWindowPos() probiert, jedoch passiert dabei nichts, machen wir was falsch?
Steht ebenfalls in der FormRezise drinne

Code:
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
SetWindowPos(      
    hwnd,
    hWebcam,
    0,
    0,
    50,       //Test
    50,       //Test
    0);
Code:
1
2
3
4
5
6
7
8
SetWindowPos(
hwnd,
hWebcam,
0,
0,
50, //Test
50, //Test
0);
Code:
1
2
3
4
5
6
7
8
SetWindowPos(      
    hwnd,
    hWebcam,
    0,
    0,
    50,       //Test
    50,       //Test
    0);
kpeter
Mitglied

Benutzerprofil
Anmeldungsdatum: 06.09.2006
Beiträge: 919
Beitrag kpeter Mitglied 09:35:56 10.03.2010   Titel:              Zitieren

Hallo,

mit folgendem Code wird die DialogBox Videoformat geöffnet.

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TForm1::sbVideoFormatClick(TObject *Sender)
{
    capDlgVideoFormat(hCap);
    CAPSTATUS CapStatus;
    capGetStatus(hCap, &CapStatus, sizeof(CAPSTATUS));
    int wi = CapStatus.uiImageWidth;
    int hi = CapStatus.uiImageHeight;

    Panel1->SetBounds( 8, 72, wi, hi);
    SetWindowPos(hCap, NULL, 0, 0, wi, hi, SWP_NOZORDER | SWP_NOMOVE);                  
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TForm1::sbVideoFormatClick(TObject *Sender)
{
capDlgVideoFormat(hCap);
CAPSTATUS CapStatus;
capGetStatus(hCap, &CapStatus, sizeof(CAPSTATUS));
int wi = CapStatus.uiImageWidth;
int hi = CapStatus.uiImageHeight;

Panel1->SetBounds( 8, 72, wi, hi);
SetWindowPos(hCap, NULL, 0, 0, wi, hi, SWP_NOZORDER | SWP_NOMOVE);
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TForm1::sbVideoFormatClick(TObject *Sender)
{
    capDlgVideoFormat(hCap);
    CAPSTATUS CapStatus;
    capGetStatus(hCap, &CapStatus, sizeof(CAPSTATUS));
    int wi = CapStatus.uiImageWidth;
    int hi = CapStatus.uiImageHeight;

    Panel1->SetBounds( 8, 72, wi, hi);
    SetWindowPos(hCap, NULL, 0, 0, wi, hi, SWP_NOZORDER | SWP_NOMOVE);                  
}


Beachtet die Reihenfolge der Fensteranpassungen. Panel1 ist das Parent-Fenster.

mfg
kpeter

edit: natürlich gehts auch ohne Dialogbox, entscheidend ist, dass der Status abgefragt wird (ab Zeile 4).
Der Dialog ist interessant wegen der bevorzugten Formate Breite/Höhe.


Zuletzt bearbeitet von kpeter am 09:47:25 10.03.2010, insgesamt 1-mal bearbeitet
hat-schii
Mitglied

Benutzerprofil
Anmeldungsdatum: 24.02.2010
Beiträge: 6
Beitrag hat-schii Mitglied 13:00:50 10.03.2010   Titel:              Zitieren

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
//---------------------------------------------------------------------------

#include <vcl.h>
#include <vfw.h>              //Video For Windows
#include <windows.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TDokuCam *DokuCam;
    HWND hWebcam;
    HWND hwnd;
//---------------------------------------------------------------------------
__fastcall TDokuCam::TDokuCam(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TDokuCam::Beenden1Click(TObject *Sender)
{
Application->Terminate();
}
//---------------------------------------------------------------------------

void __fastcall TDokuCam::FormCreate(TObject *Sender)
{
  HWND hWebcam;
  HWND hwnd = Panel1->Handle;    //Handel vom Panel -> darauf wird der Webcam Stream gelegt

  hWebcam = capCreateCaptureWindow("Capture Window", WS_CHILD | WS_VISIBLE,0, 0, Panel1->Width, Panel1->Height,hwnd, 0);

  SendMessage(hWebcam, WM_CAP_DRIVER_CONNECT,0, 0);
  SendMessage(hWebcam, WM_CAP_SET_SCALE,1, 0);
  SendMessage(hWebcam, WM_CAP_SET_PREVIEWRATE,10,0);
  SendMessage(hWebcam, WM_CAP_SET_PREVIEW,1,0);
}
//---------------------------------------------------------------------------


void __fastcall TDokuCam::FormResize(TObject *Sender)
{
    capDlgVideoFormat(hWebcam);
    CAPSTATUS CapStatus;
    capGetStatus(hWebcam, &CapStatus, sizeof(CAPSTATUS));
    int wi = CapStatus.uiImageWidth;
    int hi = CapStatus.uiImageHeight;

    Panel1->SetBounds( 5, 5, DokuCam->Width-160, DokuCam->Height-40);
    SetWindowPos(hWebcam, NULL, 0, 0, wi, hi, SWP_NOZORDER | SWP_NOMOVE);
}
//---------------------------------------------------------------------------
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
//---------------------------------------------------------------------------

#include <vcl.h>
#include <vfw.h> //Video For Windows
#include <windows.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TDokuCam *DokuCam;
HWND hWebcam;
HWND hwnd;
//---------------------------------------------------------------------------
__fastcall TDokuCam::TDokuCam(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TDokuCam::Beenden1Click(TObject *Sender)
{
Application->Terminate();
}
//---------------------------------------------------------------------------

void __fastcall TDokuCam::FormCreate(TObject *Sender)
{
HWND hWebcam;
HWND hwnd = Panel1->Handle; //Handel vom Panel -> darauf wird der Webcam Stream gelegt

hWebcam = capCreateCaptureWindow("Capture Window", WS_CHILD | WS_VISIBLE,0, 0, Panel1->Width, Panel1->Height,hwnd, 0);

SendMessage(hWebcam, WM_CAP_DRIVER_CONNECT,0, 0);
SendMessage(hWebcam, WM_CAP_SET_SCALE,1, 0);
SendMessage(hWebcam, WM_CAP_SET_PREVIEWRATE,10,0);
SendMessage(hWebcam, WM_CAP_SET_PREVIEW,1,0);
}
//---------------------------------------------------------------------------


void __fastcall TDokuCam::FormResize(TObject *Sender)
{
capDlgVideoFormat(hWebcam);
CAPSTATUS CapStatus;
capGetStatus(hWebcam, &CapStatus, sizeof(CAPSTATUS));
int wi = CapStatus.uiImageWidth;
int hi = CapStatus.uiImageHeight;

Panel1->SetBounds( 5, 5, DokuCam->Width-160, DokuCam->Height-40);
SetWindowPos(hWebcam, NULL, 0, 0, wi, hi, SWP_NOZORDER | SWP_NOMOVE);
}
//---------------------------------------------------------------------------
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
//---------------------------------------------------------------------------

#include <vcl.h>
#include <vfw.h>              //Video For Windows
#include <windows.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TDokuCam *DokuCam;
    HWND hWebcam;
    HWND hwnd;
//---------------------------------------------------------------------------
__fastcall TDokuCam::TDokuCam(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TDokuCam::Beenden1Click(TObject *Sender)
{
Application->Terminate();
}
//---------------------------------------------------------------------------

void __fastcall TDokuCam::FormCreate(TObject *Sender)
{
  HWND hWebcam;
  HWND hwnd = Panel1->Handle;    //Handel vom Panel -> darauf wird der Webcam Stream gelegt

  hWebcam = capCreateCaptureWindow("Capture Window", WS_CHILD | WS_VISIBLE,0, 0, Panel1->Width, Panel1->Height,hwnd, 0);

  SendMessage(hWebcam, WM_CAP_DRIVER_CONNECT,0, 0);
  SendMessage(hWebcam, WM_CAP_SET_SCALE,1, 0);
  SendMessage(hWebcam, WM_CAP_SET_PREVIEWRATE,10,0);
  SendMessage(hWebcam, WM_CAP_SET_PREVIEW,1,0);
}
//---------------------------------------------------------------------------


void __fastcall TDokuCam::FormResize(TObject *Sender)
{
    capDlgVideoFormat(hWebcam);
    CAPSTATUS CapStatus;
    capGetStatus(hWebcam, &CapStatus, sizeof(CAPSTATUS));
    int wi = CapStatus.uiImageWidth;
    int hi = CapStatus.uiImageHeight;

    Panel1->SetBounds( 5, 5, DokuCam->Width-160, DokuCam->Height-40);
    SetWindowPos(hWebcam, NULL, 0, 0, wi, hi, SWP_NOZORDER | SWP_NOMOVE);
}
//---------------------------------------------------------------------------


Einmal der komplette Code soweit. Selbe Problem wie zuvor, es ändert sich NUR das Panel, das Videobild bleibt unberührt, egal welche Werte ich in die SetWindowsPos() schreibe. Was machen wir falsch?
Habe als Test mal die Werte für wi und hi abgefragt, wobei wi=0 und hi=-1 war, muss das so sein?

MFG
C/C++ Forum :: VCL (C++ Builder) ::  Webcam Bild erzeugen/Lösungsansätze  
Gehen Sie zu Seite 1, 2  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.