DELPHI控制摄像头操作可以使用TVideoCap控件,或直接使用MS的AVICAP32.DLL就可轻松的实现对摄像头编程。
首先常量定义和函数定义:
implementation
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';
{$R *.dfm}
打开Delphi,添加Panel1到Form1上,定义一个全局变量,var hWndC : THandle; 添加button1 ,caption为激活摄像头:
procedure TForm1.Button1Click(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);
end;
添加button2 ,caption为关闭摄像头:
procedure TForm1.Button2Click(Sender: TObject);
begin
if hWndC <> 0 then begin
SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0);
hWndC := 0;
end;
end;
添加button3 ,caption为保存为BMP图像:
procedure TForm1.Button3Click(Sender: TObject);
begin
if hWndC <> 0 then begin
SendMessage(hWndC,WM_CAP_SAVEDIB,0,longint(pchar('c:\\test.bmp')));
end;
end;
添加button4 ,caption为开始录像:
procedure TForm1.Button4Click(Sender: TObject);
begin
if hWndC <> 0 then
begin
SendMessage(hWndC,WM_CAP_FILE_SET_CAPTURE_FILEA,0, Longint(pchar('c:\\test.avi')));
SendMessage(hWndC, WM_CAP_SEQUENCE, 0, 0);
end;
end;
添加button5 ,caption为停止录像:
procedure TForm1.Button5Click(Sender: TObject);
begin
if hWndC <> 0 then begin
SendMessage(hWndC, WM_CAP_STOP, 0, 0);
end;
end;
添加button6,caption为退出:
procedure TForm1.Button6Click(Sender: TObject);
begin
close;
end;
可以添加MediaPlayer和opendialog控件
添加button7,caption为加载视频:
procedure TForm1.Button7Click(Sender: TObject);
begin
openDialog1.DefaultExt := 'avi';
openDialog1.Filter := 'avi files (*.avi)|*.avi';
if OpenDialog1.Execute then
begin
if (MediaPlayer1.DeviceID<>0) then
begin
if (MediaPlayer1.Mode=mpplaying) then MediaPlayer1.Stop;
end;
MediaPlayer1.FileName:=openDialog1.FileName;
//MediaPlayer1.DisplayRect.Top:=panel2.Top;
//MediaPlayer1.DisplayRect.Left:=panel2.left;
//MediaPlayer1.DisplayRect.Right:=panel2.Height;
//MediaPlayer1.DeviceType :=dtAutoSelect;
Mediaplayer1.Open;
MediaPlayer1.Play;
end;
end;
如果电脑没有摄像头,panel就会黑黑的,可以尝试安装SoftCam虚拟摄像头。
关于摄像头编程,大家也可以看看这组VCL组件:DSPack,DSPack是一套使用微软Direct Show和DirectX技术的类和组件,设计工作于DirectX 9,支持系统Win9X, ME, 2000和Windows XP。
视屏聊天 按数据压缩传输给对方,显示出来,不是那么简单。
unit Unit1; interface uses type { Private declarations } var implementation procedure TForm1.Button1Click(Sender: TObject); procedure TForm1.Button2Click(Sender: TObject); procedure TForm1.Button3Click(Sender: TObject); procedure TForm1.Button4Click(Sender: TObject); procedure TForm1.Button5Click(Sender: TObject); procedure TForm1.Button7Click(Sender: TObject); if OpenDialog1.Execute then MediaPlayer1.FileName:=openDialog1.FileName; procedure TForm1.Button6Click(Sender: TObject); end. //= == ===================== object Form1: TForm1 |
摘录自:Delphi摄像头操作 http://yxmhero1989.blog.163.com/blog/static/112157956201102703433980/
试写的Delphi摄像头照相(抓图)小软件 http://www.codefans.net/soft/8385.shtml
Delphi 激活摄像头 http://hi.baidu.com/warrially/blog
利用Delphi编程控制摄像头 http://www.haoxiai.net/bianchengyuyan/Delphi/84272.html
http://blog.csdn.net/walkershrek/archive/2007/12/04/1915440.aspx
关与Usb摄像头问题 http://group.gimoo.net/review/142849
MTPlay V1.0 摄像头视频捕捉程序 www.hackcode.com
用Delphi开发视频捕获(摄像头拍照)程序 http://www.delphibbs.com/keylife/iblog_show.asp?xid=15554
Delphi实现摄像头拍照能 http://www.xuedelphi.cn/wenzhang/mrjq/gjyy/2008/11/200811232621.htm
用Delphi控制摄像头编程(转载)http://blog.ednchina.com/999wjc/4230/message.aspx
http://blog.csdn.net/walkershrek/archive/2007/12/04/1915429.aspx
VB编写控制摄像头程序 http://down.bbs156.cn/exef1226.html
一个用VC写的视屏聊天工具(源代码) http://www.trydone.com/posts/list/301.page
GraghDialog.rar http://www.hackchina.com/cont/182020