![]() |
Webcam-Schnappschuss - OHNE(!) zwischenspeichern
Hallo DP!
Ich möchte gerne mit (etwa) 2fps meine Webcam abtasten und das Bild ausgeben lassen. Zur Zeit habe ich dafür eine von smallsmoker in der Codelib veröffentlichte Version, die eigentlich genau das kann, aber dafür das Bild immer zwischenspeichern muss:
Delphi-Quellcode:
Das Grundprinzip gefällt mir so weit und ich möchte es auch weiterhin per Timer - Oder vielleicht auch als Thread - einbinden.
procedure GetWebcamSnapshot(Filename: string);
var bmi: BITMAPINFO; begin if isConnected then begin SendMessage(CaptureWindow, WM_CAP_SET_VIDEOFORMAT, 0, integer(@bmi)); SendMessage(CaptureWindow, WM_CAP_GRAB_FRAME, 0, 0); SendMessage(CaptureWindow, WM_CAP_SAVEDIB, 0, longint(PChar(Filename))); end; end; Mein Problem ist jetzt, aus dieser Prozedur eine Funktion zu erstellen, die ein TBitmap liefert, ohne es auf der Festplatte zwischenlagern zu müssen. Wenn möglich ohne großen zusätzlichen Rechenaufwand...! Vielen Dank schonmal im Voraus, Der LDer. |
Re: Webcam-Schnappschuss - OHNE(!) zwischenspeichern
Delphi-Quellcode:
... gefunden ;)
function GetWebcamSS:TBitmap;
var bmi: BITMAPINFO; begin if isConnected then begin SendMessage(CaptureWindow, WM_CAP_SET_VIDEOFORMAT, 0, integer(@bmi)); SendMessage(CaptureWindow, WM_CAP_GRAB_FRAME, 0, 0); Result:=TBitmap.Create; Result.PixelFormat := pf24Bit; SendMessage(CaptureWindow,WM_CAP_EDIT_COPY,1,0); Result.LoadFromClipboardFormat(cf_BitMap,ClipBoard.GetAsHandle(cf_Bitmap),0); end; end; |
Re: Webcam-Schnappschuss - OHNE(!) zwischenspeichern
Das Ding kopiert das Bild in die Zwischenablage und macht damit die Benutzung derselben durch den Anwender praktisch unmöglich .. in 95% der Fälle ein absolutes No-Go und auch in den restlichen 5% sicher keine schöne Lösung.
Hatte mal dasselbe Problem wie du ... hab aber keine Lösung gefunden, die auf allen aktuellen Betriebssystem zuverlässig funktioniert. |
Re: Webcam-Schnappschuss - OHNE(!) zwischenspeichern
hab jetzt nicht alles da durchgelesen, aber so auf den ersten Blick klingt das doch gut?
WM_CAP_SET_CALLBACK_FRAME hoff ich hab des jetzt nicht falsch verstanden, aber wenn, dann bekommt die registrierte Prozedur das Bild :gruebel: |
Re: Webcam-Schnappschuss - OHNE(!) zwischenspeichern
Also, das mit der Zwischenablage ist keine gute Lösung wie schon geschrieben.
So ohne weiteres klappt das auch nicht mit solch einem Mini-Code, da muss man schon etwas weiter in die Materie rein. Mit unterstützung der Datei vfw.pas kann man ein Webcambilt als Bitmap grappen. ![]() Zu beachten wäre: ![]() da gibt es auch ein vereinfachtes Beispiel mit DirectShow auf Basis des Programmes von grizzly: ![]() Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz