Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Zugriff auf aktuelles Bild der Webcam (https://www.delphipraxis.net/119286-zugriff-auf-aktuelles-bild-der-webcam.html)

tryanderror 23. Aug 2008 17:45


Zugriff auf aktuelles Bild der Webcam
 
Hallo,

Zur Zeit schreibe ich ein Programm, das (wenn es fertig ist) auf das aktuelle Bild einer Webcam zugreifen und auch eine Analyse vornehmen soll. Momentan arbeite ich noch mit Testbildern, die ich manuell mit der Webcam gemacht habe. Jetzt möchte ich dem Programm beibringen, die Bilder selbst von der Webcam zu holen und habe dazu folgendes in der Code-Library gefunden:

http://www.delphipraxis.net/internal...ct.php?t=71146

Es funktioniert soweit auch ganz gut, auf dem Panel wird das Bild auch angezeigt.
Doch wie kann ich das aktuelle Bild beispielsweise speichern und in einem Image anzeigen lassen? Da steht irgendwas von setDIBits, aber ich habe von dem ganzen leider keine Ahnung :-(

Schon mal vielen Dank im Voraus für eure Hilfe!

r29d43 23. Aug 2008 19:18

Re: Zugriff auf aktuelles Bild der Webcam
 
hi,

Zitat:

Zitat von tryanderror
...Doch wie kann ich das aktuelle Bild beispielsweise speichern und in einem Image anzeigen lassen? Da steht irgendwas von setDIBits...

steht doch in der Kommentarzeile (dieser SetDIBits-Anweisung) schon quasi drüber:

Delphi-Quellcode:
// laden der DIB-Bits in das normale (DDB-)FBitmap zur weiteren ganz normalen Bildbearbeitung
..was also in etwa heißen soll, dass in dieser Zeile die Bits von FBitmap2 (welches zur Dekomprimierung ja in ein DIB umgewandelt werden musste) nun mittels dieser "setDIBits"-Funktion wieder in die Bits eines normalen TBitmaps (="FBitmap") zurücküberführt werden. Und dieses ganz normale TBitmap (="FBitmap") kannst Du jetzt jederzeit per einfachem Button-Click abspeichern:


Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  FBitmap.SaveToFile(DeinFilename);
end;
..oder einem Image zuweisen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Image1.Picture.Assign(FBitmap);
end;
edit:

..oder eben sonst irgendwie analytisch untersuchen oder weiterverarbeiten, wie ja in diesem gelinkten Thread auch schon angedeutet wurde.

tryanderror 24. Aug 2008 16:12

Re: Zugriff auf aktuelles Bild der Webcam
 
Ah cool, hätte nicht gedacht, dass es so einfach ist :D

Vielen Dank!

tryanderror 29. Okt 2008 20:48

Re: Zugriff auf aktuelles Bild der Webcam
 
Da ich eine weitere Frage zu diesem Thema habe, grabe ich diesen Thread mal wieder aus:

Beim Initialisieren erscheint ja ein Dialog, in dem man verschiedene Sachen einstellen kann, u.a. auch die Auflösung des Bildes. Ich habe hier eine Webcam mit 1,3 Megapixel, doch die größte Auflösung, die ich in dem Dialog auswählen kann, ist 640x480. Was muss ich ändern, damit ich auf die volle Auflösung der Webcam zugreifen kann?

r29d43 30. Okt 2008 12:37

Re: Zugriff auf aktuelles Bild der Webcam
 
Das kannst Du mal mit WM_CAP_SET_VIDEOFORMAT versuchen. WM_CAP_GET_VIDEOFORMAT ist ja im Tut schon benutzt worden. Das Funktionsprinzip von WM_CAP_SET_VIDEOFORMAT ist da in etwa das gleiche, nur jetzt eben in die andere Richtung: Bevor Du die Message abschickst, musst Du zuerst noch die entsprechenden Felder von "FCapBitmapInfo" laden. Und event. vorher auch noch das CaptureWindow=Panel1 entsprechend vergrößern.

Andi1985 30. Okt 2008 12:50

Re: Zugriff auf aktuelles Bild der Webcam
 
mehr dazu kannst du auch hier finden: http://www.delphipraxis.net/internal...814&highlight=

tryanderror 30. Okt 2008 21:00

Re: Zugriff auf aktuelles Bild der Webcam
 
Wie würde das denn mit WM_CAP_SET_VIDEOFORMAT funktionieren?

Momentan steht bei mir ja

WM_CAP_GET_VIDEOFORMAT = WM_CAP_START + 44

Das ist für mich (ist für mich das erste Mal, dass ich in Delphi auf ne Webcam zugreife, also Neuland) irgendwie recht intransparent. Was müsste den bei WM_CAP_SET_VIDEOFORMAT hinter dem "=" stehen, damit ich höhere Auflösungen bekomme?

r29d43 30. Okt 2008 23:12

Re: Zugriff auf aktuelles Bild der Webcam
 
Das steht natürlich auch in dieser "video for windows"-Unit "vfw.pas", die im Tut gelinkt ist:

WM_CAP_SET_VIDEOFORMAT = WM_CAP_START + 45;

Also, einfach zuerst den BitmapInfo-Record ("FCapBitmapInfo") entsprechend laden und ihn dann mit SendMessage abschicken. Im Link von Andi1985 wird diese Methode übrigens auch schon versucht.


Allerdings, allzu große Hoffnungen sollte man dabei auch wirklich nicht hegen. Denn wie es ja auch schon im msdn-Kommentar dieser Message drinsteht: Das Videoformat ist Geräte-spezifisch, dh. der Treiber muss das auch können. Und imo wird dieser VideoFormat-Dialog aber auch schon genau das anzeigen, was der Treiber diesbezüglich auch bloß kann ...werde da event. aber auch gerne eines besseren belehrt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz