AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Webcam-Schnappschuss - OHNE(!) zwischenspeichern
Thema durchsuchen
Ansicht
Themen-Optionen

Webcam-Schnappschuss - OHNE(!) zwischenspeichern

Ein Thema von LDericher · begonnen am 28. Jul 2009 · letzter Beitrag vom 28. Jul 2009
Antwort Antwort
Benutzerbild von LDericher
LDericher

Registriert seit: 29. Jan 2007
Ort: Erkelenz
224 Beiträge
 
Delphi 7 Enterprise
 
#1

Webcam-Schnappschuss - OHNE(!) zwischenspeichern

  Alt 28. Jul 2009, 14:53
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:
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;
Das Grundprinzip gefällt mir so weit und ich möchte es auch weiterhin per Timer - Oder vielleicht auch als Thread - einbinden.
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.
  Mit Zitat antworten Zitat
Benutzerbild von LDericher
LDericher

Registriert seit: 29. Jan 2007
Ort: Erkelenz
224 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Webcam-Schnappschuss - OHNE(!) zwischenspeichern

  Alt 28. Jul 2009, 16:12
Delphi-Quellcode:
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;
... gefunden
  Mit Zitat antworten Zitat
Florian H

Registriert seit: 30. Mär 2003
Ort: Mühlacker
1.043 Beiträge
 
Delphi 6 Professional
 
#3

Re: Webcam-Schnappschuss - OHNE(!) zwischenspeichern

  Alt 28. Jul 2009, 16:37
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.
Florian Heft
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#4

Re: Webcam-Schnappschuss - OHNE(!) zwischenspeichern

  Alt 28. Jul 2009, 17:07
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#5

Re: Webcam-Schnappschuss - OHNE(!) zwischenspeichern

  Alt 28. Jul 2009, 17:18
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.

http://www.delphipraxis.net/internal...=376191#376191

Zu beachten wäre:
http://www.delphipraxis.net/internal...021738#1021738
da gibt es auch ein vereinfachtes Beispiel mit DirectShow auf Basis des
Programmes von grizzly: http://www.delphipraxis.net/internal...=558841#558841


Zitat von himitsu:
hab jetzt nicht alles ... WM_CAP_SET_CALLBACK_FRAME ... dann bekommt die registrierte Prozedur das Bild
Ja. (wenn ich mich nicht irre)
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:29 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