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!)
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.
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?!
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.
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:
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;
void __fastcall TForm1::sbVideoFormatClick(TObject *Sender)
{
capDlgVideoFormat(hCap);
CAPSTATUS CapStatus;
capGetStatus(hCap, &CapStatus, sizeof(CAPSTATUS));
int wi = CapStatus.uiImageWidth;
int hi = CapStatus.uiImageHeight;
void __fastcall TForm1::sbVideoFormatClick(TObject *Sender)
{
capDlgVideoFormat(hCap);
CAPSTATUS CapStatus;
capGetStatus(hCap, &CapStatus, sizeof(CAPSTATUS));
int wi = CapStatus.uiImageWidth;
int hi = CapStatus.uiImageHeight;
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
void __fastcall TDokuCam::FormResize(TObject *Sender)
{
capDlgVideoFormat(hWebcam);
CAPSTATUS CapStatus;
capGetStatus(hWebcam, &CapStatus, sizeof(CAPSTATUS));
int wi = CapStatus.uiImageWidth;
int hi = CapStatus.uiImageHeight;
void __fastcall TDokuCam::FormResize(TObject *Sender)
{
capDlgVideoFormat(hWebcam);
CAPSTATUS CapStatus;
capGetStatus(hWebcam, &CapStatus, sizeof(CAPSTATUS));
int wi = CapStatus.uiImageWidth;
int hi = CapStatus.uiImageHeight;
void __fastcall TDokuCam::FormResize(TObject *Sender)
{
capDlgVideoFormat(hWebcam);
CAPSTATUS CapStatus;
capGetStatus(hWebcam, &CapStatus, sizeof(CAPSTATUS));
int wi = CapStatus.uiImageWidth;
int hi = CapStatus.uiImageHeight;
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?
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.
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.