如何控制电脑摄像头每一分中抓拍一次? 如题? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 去找个诸如TVideoGrabber,或者DsPack之类的控件即可以实现摄像头的抓拍,然后简单的弄个TTimer就可以了 不用控件也可以。unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;type TForm1 = class(TForm) Panel1: TPanel; SaveDialog1: TSaveDialog; Panel2: TPanel; OpenVideo: TButton; CloseVideo: TButton; SaveBMP: TButton; StartAVI: TButton; StopAVI: TButton; procedure FormCreate(Sender: TObject); procedure OpenVideoClick(Sender: TObject); procedure CloseVideoClick(Sender: TObject); procedure SaveBMPClick(Sender: TObject); procedure StartAVIClick(Sender: TObject); procedure StopAVIClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private hWndC : THandle;CapturingAVI : bool; { Private declarations } 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;const WM_CAP_SEQUENCE_NOFILE =WM_CAP_START+ 63 ;const WM_CAP_SET_OVERLAY =WM_CAP_START+ 51 ;const WM_CAP_SET_PREVIEW =WM_CAP_START+ 50 ;const WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START +6;const WM_CAP_SET_CALLBACK_ERROR=WM_CAP_START +2;const WM_CAP_SET_CALLBACK_STATUSA= WM_CAP_START +3;const WM_CAP_SET_CALLBACK_FRAME= WM_CAP_START +5;const WM_CAP_SET_SCALE=WM_CAP_START+ 53 ;const WM_CAP_SET_PREVIEWRATE=WM_CAP_START+ 52 ;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_SET_CALLBACK_VIDEOSTREAM, 0, 0); SendMessage(hWndC, WM_CAP_SET_CALLBACK_ERROR, 0, 0); SendMessage(hWndC, WM_CAP_SET_CALLBACK_STATUSA, 0, 0); SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0); SendMessage(hWndC, WM_CAP_SET_SCALE, 1, 0); SendMessage(hWndC, WM_CAP_SET_PREVIEWRATE, 66, 0); //SendMessage(hWndC, WM_CAP_SEQUENCE_NOFILE, 1, 0); SendMessage(hWndC, WM_CAP_SET_OVERLAY, 1, 0); SendMessage(hWndC, WM_CAP_SET_PREVIEW, 1, 0); OpenVideo.Enabled :=false;end;procedure TForm1.CloseVideoClick(Sender: TObject);begin if hWndC <> 0 then begin SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0); hWndC := 0; OpenVideo.Enabled :=true; end;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);beginif hWndC <> 0 then beginSaveDialog1.DefaultExt := 'avi';SaveDialog1.Filter := 'AVI files (*.avi)|*.avi';if SaveDialog1.Execute then beginCapturingAVI := 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);beginif hWndC <> 0 then beginSendMessage(hWndC, WM_CAP_STOP, 0, 0);CapturingAVI := false;end;end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);beginCloseVideoClick(Sender);end;end. TTimer就可以了关键你得会抓拍, 大家来说说你见过的/听说过的电脑/编程高手的事迹 soaptoolkit的问题,请帮忙,在线等待 如何在不同分辨率模式下,都能使自己的软件很美观; 谁有VPN拨号程序方面的经验 各位大哥帮帮忙,自动改变宽度的 DBGrid 的问题?(源码贴出) 关于CLINETSOCKET控件问题,急!~各位帮忙啊 listview是怎么使用的? 菜鸟的问题 如何等待线程结束再继续下一步? 高手进来看看,给个思路!!!!! delphi 异步线程 IdTCPServer多客户端同时请求传文件出错
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;type
TForm1 = class(TForm)
Panel1: TPanel;
SaveDialog1: TSaveDialog;
Panel2: TPanel;
OpenVideo: TButton;
CloseVideo: TButton;
SaveBMP: TButton;
StartAVI: TButton;
StopAVI: TButton;
procedure FormCreate(Sender: TObject);
procedure OpenVideoClick(Sender: TObject);
procedure CloseVideoClick(Sender: TObject);
procedure SaveBMPClick(Sender: TObject);
procedure StartAVIClick(Sender: TObject);
procedure StopAVIClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
hWndC : THandle;
CapturingAVI : bool;
{ Private declarations }
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;
const WM_CAP_SEQUENCE_NOFILE =WM_CAP_START+ 63 ;
const WM_CAP_SET_OVERLAY =WM_CAP_START+ 51 ;
const WM_CAP_SET_PREVIEW =WM_CAP_START+ 50 ;
const WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START +6;
const WM_CAP_SET_CALLBACK_ERROR=WM_CAP_START +2;
const WM_CAP_SET_CALLBACK_STATUSA= WM_CAP_START +3;
const WM_CAP_SET_CALLBACK_FRAME= WM_CAP_START +5;
const WM_CAP_SET_SCALE=WM_CAP_START+ 53 ;
const WM_CAP_SET_PREVIEWRATE=WM_CAP_START+ 52 ;
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_SET_CALLBACK_VIDEOSTREAM, 0, 0);
SendMessage(hWndC, WM_CAP_SET_CALLBACK_ERROR, 0, 0);
SendMessage(hWndC, WM_CAP_SET_CALLBACK_STATUSA, 0, 0);
SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0);
SendMessage(hWndC, WM_CAP_SET_SCALE, 1, 0);
SendMessage(hWndC, WM_CAP_SET_PREVIEWRATE, 66, 0);
//SendMessage(hWndC, WM_CAP_SEQUENCE_NOFILE, 1, 0);
SendMessage(hWndC, WM_CAP_SET_OVERLAY, 1, 0);
SendMessage(hWndC, WM_CAP_SET_PREVIEW, 1, 0);
OpenVideo.Enabled :=false;
end;procedure TForm1.CloseVideoClick(Sender: TObject);
begin
if hWndC <> 0 then begin
SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0);
hWndC := 0;
OpenVideo.Enabled :=true;
end;
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;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
CloseVideoClick(Sender);
end;end.