HomePage   Delphi Library  

FAQ1037D.txt How can I capture an image from a video source?

Category :Miscellaneous

Platform :All

Product :All 32 bit

Question:

How can I capture an image from a video source?

Answer:

For a complete example, you need to get the Microsoft Video for Windows SDK. The following simple example shows how to open the

default video capture device, grab a frame from the device, save a frame from the device to the disk as a .BMP (device independent

bitmap) file, record a .AVI file (with sound, but without preview), and close the device. Note: You must have a video capture device

installed for this example to work.

Example:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls;

type

TForm1 = class(TForm)

Panel1: TPanel;

OpenVideo: TButton;

CloseVideo: TButton;

GrabFrame: TButton;

SaveBMP: TButton;

StartAVI: TButton;

StopAVI: TButton;

SaveDialog1: TSaveDialog;

procedure FormCreate(Sender: TObject);

procedure OpenVideoClick(Sender: TObject);

procedure CloseVideoClick(Sender: TObject);

procedure GrabFrameClick(Sender: TObject);

procedure SaveBMPClick(Sender: TObject);

procedure StartAVIClick(Sender: TObject);

procedure StopAVIClick(Sender: TObject);

private

{ Private declarations }

hWndC : THandle;

CapturingAVI : bool;

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

const WM_CAP_START = WM_USER;

const WM_CAP_STOP = WM_CAP_START + 68;

const WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10;

const WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11;

const WM_CAP_SAVEDIB = WM_CAP_START + 25;

const WM_CAP_GRAB_FRAME = WM_CAP_START + 60;

const WM_CAP_SEQUENCE = WM_CAP_START + 62;

const WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20;

function capCreateCaptureWindowA(lpszWindowName : PCHAR;

dwStyle : longint;

x : integer;

y : integer;

nWidth : integer;

nHeight : integer;

ParentWin : HWND;

nId : integer): HWND;

STDCALL EXTERNAL 'AVICAP32.DLL';

procedure TForm1.FormCreate(Sender: TObject);

begin

CapturingAVI := false;

hWndC := 0;

SaveDialog1.Options :=

[ofHideReadOnly, ofNoChangeDir, ofPathMustExist]

end;

procedure TForm1.OpenVideoClick(Sender: TObject);

begin

hWndC := capCreateCaptureWindowA('My Own Capture Window',

WS_CHILD or WS_VISIBLE ,

Panel1.Left,

Panel1.Top,

Panel1.Width,

Panel1.Height,

Form1.Handle,

0);

if hWndC <> 0 then

SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0);

end;

procedure TForm1.CloseVideoClick(Sender: TObject);

begin

if hWndC <> 0 then begin

SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0);

hWndC := 0;

end;

end;

procedure TForm1.GrabFrameClick(Sender: TObject);

begin

if hWndC <> 0 then

SendMessage(hWndC, WM_CAP_GRAB_FRAME, 0, 0);

end;

procedure TForm1.SaveBMPClick(Sender: TObject);

begin

if hWndC <> 0 then begin

SaveDialog1.DefaultExt := 'bmp';

SaveDialog1.Filter := 'Bitmap files (*.bmp)|*.bmp';

if SaveDialog1.Execute then

SendMessage(hWndC,

WM_CAP_SAVEDIB,

0,

longint(pchar(SaveDialog1.FileName)));

end;

end;

procedure TForm1.StartAVIClick(Sender: TObject);

begin

if hWndC <> 0 then begin

SaveDialog1.DefaultExt := 'avi';

SaveDialog1.Filter := 'AVI files (*.avi)|*.avi';

if SaveDialog1.Execute then begin

CapturingAVI := true;

SendMessage(hWndC,

WM_CAP_FILE_SET_CAPTURE_FILEA,

0,

Longint(pchar(SaveDialog1.FileName)));

SendMessage(hWndC, WM_CAP_SEQUENCE, 0, 0);

end;

end;

end;

procedure TForm1.StopAVIClick(Sender: TObject);

begin

if hWndC <> 0 then begin

SendMessage(hWndC, WM_CAP_STOP, 0, 0);

CapturingAVI := false;

end;

end;

end.

7/16/98 4:31:28 PM

Hosted by www.Geocities.ws

1