Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Library: Grafik / Sound / Multimedia (https://www.delphipraxis.net/21-library-grafik-sound-multimedia/)
-   -   Delphi Webcam Bilder speichern (https://www.delphipraxis.net/101341-webcam-bilder-speichern.html)

Flips 11. Okt 2007 16:26


Webcam Bilder speichern
 
Da in letzter Zeit oft gefragt wurde, wie man denn das aktuelle Bild der Webcam lokal speichern kann, gebe ich hier zwei Möglichkeiten an.
Beide Funktionen erwarten nur den Dateinamen und das Handle, welches bei der Initialisierung von der Funktion capCreateCaptureWindow zurückgegeben wird.

Die erste Möglichkeit über die Zwischenablage:
Format: Bitmap
Delphi-Quellcode:
procedure SaveWebcamPicture(strFilename: string;WebcamHandle: THandle);
const WM_CAP_EDIT_COPY = WM_USER + 30;
var Bitmap : TBitmap;
begin
Bitmap := TBitmap.Create;
 try
   Bitmap.PixelFormat := pf24Bit;
   SendMessage(WebcamHandle,WM_CAP_EDIT_COPY,1,0);
   Bitmap.LoadFromClipboardFormat(cf_BitMap,ClipBoard.GetAsHandle(cf_Bitmap),0);
   Bitmap.SaveToFile(strFilename);
 finally
   FreeAndNil(Bitmap);
 end;
end;
Beispielaufruf:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
//VideoHandle = Zurückgegebenes Handle bei der Initialisierung
SaveWebcamPicture('C:\test.bmp',VideoHandle);
end;

Die zweite Möglichkeit über capFileSaveDIB:
Format: JPEG
Delphi-Quellcode:
function SaveWebcamPictureDIB(pFileName: PChar;WebcamHandle: THandle):Boolean;
const WM_CAP_FILE_SAVEDIB = WM_USER + 25;
begin
if IsWindow(WebcamHandle) then
  result := (SendMessage(WebcamHandle,WM_CAP_FILE_SAVEDIB,0,LPARAM(pFileName)) <> 0)
else
  result := false;
end;
Beispielaufruf:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
//VideoHandle = Zurückgegebenes Handle bei der Initialisierung
SaveWebcamPictureDIB(PChar('C:\test.jpg'),VideoHandle);
end;
Da sollte jetzt für jeden was dabei sein :mrgreen:

fkerber 2. Mär 2008 09:59

Re: Webcam Bilder speichern
 
Eine Anmerkung von Flips zur zweiten Variante:

Zitat:

In der zweiten Möglichkeit zur Speicherung gebe ich die Message WM_CAP_FILE_SAVEDIB an, schreibe aber, dass es sich bei der erstellten Datei um ein JPEG-Bild handelt.

Wie man in einem aktuellen Beitrag allerdings sehen kann, liefert diese Routine/Message wie auch in der MSDN (WM_CAP_FILE_SAVEDIB) beschrieben ein DIB-Bild zurück (änhlich des Bitmap Formats, wenn nicht sogar identisch :gruebel: ).

Allerdings werden die Bilder auch mit der Endung JPEG fehlerfrei dargestellt, trotzdem bitte ich, dass zu ändern, da sonst womöglich einige User Probleme bei der Konvertierung bekommen werden (bzw. schon bekommen haben :oops: );-)!


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:18 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