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
Philipp F.