Delphi编程控制摄像头.docx
- 文档编号:6805639
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:8
- 大小:16.42KB
Delphi编程控制摄像头.docx
《Delphi编程控制摄像头.docx》由会员分享,可在线阅读,更多相关《Delphi编程控制摄像头.docx(8页珍藏版)》请在冰豆网上搜索。
Delphi编程控制摄像头
Delphi编程控制摄像头
你的电脑有没有摄像头?
看到别人用QQ玩视屏你会不会去想怎么实现的?
这里介绍使用DELPHI使用MS的AVICAP32.DLL就可轻松的实现对摄像头编程, 假如再加上你的网络编程水平,实现一个视屏聊天就不成什么问题了。
看看下面代码的代码:
constWM_CAP_START=WM_US...
你的电脑有没有摄像头?
看到别人用QQ玩视屏你会不会去想怎么实现的?
这里介绍使用DELPHI使用MS的AVICAP32.DLL就可轻松的实现对摄像头编程,
假如再加上你的网络编程水平,实现一个视屏聊天就不成什么问题了。
看看下面代码的代码:
constWM_CAP_START=WM_USER;
constWM_CAP_STOP=WM_CAP_START68;
constWM_CAP_DRIVER_CONNECT=WM_CAP_START10;
constWM_CAP_DRIVER_DISCONNECT=WM_CAP_START11;
constWM_CAP_SAVEDIB=WM_CAP_START25;
constWM_CAP_GRAB_FRAME=WM_CAP_START60;
constWM_CAP_SEQUENCE=WM_CAP_START62;
constWM_CAP_FILE_SET_CAPTURE_FILEA=WM_CAP_START20;
constWM_CAP_SEQUENCE_NOFILE=WM_CAP_START63
constWM_CAP_SET_OVERLAY=WM_CAP_START51
constWM_CAP_SET_PREVIEW=WM_CAP_START50
constWM_CAP_SET_CALLBACK_VIDEOSTREAM=WM_CAP_START6;
constWM_CAP_SET_CALLBACK_ERROR=WM_CAP_START2;
constWM_CAP_SET_CALLBACK_STATUSA=WM_CAP_START3;
constWM_CAP_SET_CALLBACK_FRAME=WM_CAP_START5;
constWM_CAP_SET_SCALE=WM_CAP_START53
constWM_CAP_SET_PREVIEWRATE=WM_CAP_START52
functioncapCreateCaptureWindowA(lpszWindowName:
PCHAR;dwStyle:
longint;x:
integer;
y:
integer;nWidth:
integer;nHeight:
integer;ParentWin:
HWND;
nId:
integer):
HWND;STDCALLEXTERNAL‘AVICAP32.DLL‘;
上面的代码就是我们主要用到的一个函数和常量的定义。
好了,打开你的Delphi,新建一个工程,将上面的定义加上吧。
新建一个窗口,放个Panel上去,添加一个按钮,Caption设置为"开始"
这里需要定义一个全局变量,varhWndC:
THandle;
开始按钮代码如下:
begin
hWndC:
=capCreateCaptureWindowA(‘MyOwnCaptureWindow‘,WS_CHILDorWS_VISIBLE,Panel1.Left,Panel1.Top,Panel1.Width,Panel1.Height,Form1.Handle,0);
hWndC:
=capCreateCaptureWindowA(‘MyOwnCaptureWindow‘,WS_CHILDorWS_VISIBLE,Panel1.Left,Panel1.Top,Panel1.Width,Panel1.Height,Form1.Handle,0);
ifhWndC<>0then
begin
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_SET_OVERLAY,1,0);
SendMessage(hWndC,WM_CAP_SET_PREVIEW,1,0);
end;
按F9运行一下,怎么样,是不是可以看到摄像头的视屏了?
那怎么停下来?
再加个按钮caption设置成"停止"
代码如下:
ifhWndC<>0thenbegin
SendMessage(hWndC,WM_CAP_DRIVER_DISCONNECT,0,0);
hWndC:
=0;
end;
视屏截到了,怎么把它给保存下来呢?
下面按两种方式保存,一个是BMP静态图,一个是AVI动画。
再放三个按钮到窗体上去,caption分别设置成"保存BMP"、"开始录像"、"停止录像"
三个按钮的代码分别如下:
//保存BMP
ifhWndC<>0thenbegin
SendMessage(hWndC,WM_CAP_SAVEDIB,0,longint(pchar(‘c:
est.bmp‘)));
end;
//开始录像
ifhWndC<>0then
begin
SendMessage(hWndC,WM_CAP_FILE_SET_CAPTURE_FILEA,0,Longint(pchar(‘c:
est.avi‘)));
SendMessage(hWndC,WM_CAP_SEQUENCE,0,0);
end;
//停止录像
ifhWndC<>0thenbegin
SendMessage(hWndC,WM_CAP_STOP,0,0);
end;
再运行看看吧。
。
可以保存几张图看看,也可以录成AVI以后慢慢欣赏。
程序运行效果:
[相关贴图]
完整的程序代码如下:
unitUnit1;
interface
uses
Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,
Dialogs,StdCtrls,ExtCtrls;
type
TForm1=class(TForm)
Panel1:
TPanel;
Button1:
TButton;
Button2:
TButton;
Button3:
TButton;
Button4:
TButton;
Button5:
TButton;
procedureButton1Click(Sender:
TObject);
procedureButton2Click(Sender:
TObject);
procedureButton3Click(Sender:
TObject);
procedureButton4Click(Sender:
TObject);
procedureButton5Click(Sender:
TObject);
procedureFormClose(Sender:
TObject;varAction:
TCloseAction);
private
hWndC:
THandle;
public
{Publicdeclarations}
end;
var
Form1:
TForm1;
constWM_CAP_START=WM_USER;
constWM_CAP_STOP=WM_CAP_START68;
constWM_CAP_DRIVER_CONNECT=WM_CAP_START10;
constWM_CAP_DRIVER_DISCONNECT=WM_CAP_START11;
constWM_CAP_SAVEDIB=WM_CAP_START25;
constWM_CAP_GRAB_FRAME=WM_CAP_START60;
constWM_CAP_SEQUENCE=WM_CAP_START62;
constWM_CAP_FILE_SET_CAPTURE_FILEA=WM_CAP_START20;
constWM_CAP_SEQUENCE_NOFILE=WM_CAP_START63
constWM_CAP_SET_OVERLAY=WM_CAP_START51
constWM_CAP_SET_PREVIEW=WM_CAP_START50
constWM_CAP_SET_CALLBACK_VIDEOSTREAM=WM_CAP_START6;
constWM_CAP_SET_CALLBACK_ERROR=WM_CAP_START2;
constWM_CAP_SET_CALLBACK_STATUSA=WM_CAP_START3;
constWM_CAP_SET_CALLBACK_FRAME=WM_CAP_START5;
constWM_CAP_SET_SCALE=WM_CAP_START53
constWM_CAP_SET_PREVIEWRATE=WM_CAP_START52
functioncapCreateCaptureWindowA(lpszWindowName:
PCHAR;
dwStyle:
longint;x:
integer;y:
integer;nWidth:
integer;
nHeight:
integer;ParentWin:
HWND;nId:
integer):
HWND;
STDCALLEXTERNAL‘AVICAP32.DLL‘;
implementation
{$R*.dfm}
procedureTForm1.Button1Click(Sender:
TObject);
begin
hWndC:
=capCreateCaptureWindowA(‘MyOwnCaptureWindow‘,WS_CHILDorWS_VISIBLE,Panel1.Left,Panel1.Top,Panel1.Width,Panel1.Height,Form1.Handle,0);
hWndC:
=capCreateCaptureWindowA(‘MyOwnCaptureWindow‘,WS_CHILDorWS_VISIBLE,Panel1.Left,Panel1.Top,Panel1.Width,Panel1.Height,Form1.Handle,0);
ifhWndC<>0then
begin
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_SET_OVERLAY,1,0);
SendMessage(hWndC,WM_CAP_SET_PREVIEW,1,0);
end;
end;
procedureTForm1.Button2Click(Sender:
TObject);
begin
ifhWndC<>0thenbegin
SendMessage(hWndC,WM_CAP_DRIVER_DISCONNECT,0,0);
hWndC:
=0;
end;
end;
procedureTForm1.Button3Click(Sender:
TObject);
begin
ifhWndC<>0thenbegin
SendMessage(hWndC,WM_CAP_SAVEDIB,0,longint(pchar(‘c:
est.bmp‘)));
end;
end;
procedureTForm1.Button4Click(Sender:
TObject);
begin
ifhWndC<>0then
begin
SendMessage(hWndC,WM_CAP_FILE_SET_CAPTURE_FILEA,0,Longint(pchar(‘c:
est.avi‘)));
SendMessage(hWndC,WM_CAP_SEQUENCE,0,0);
end;
end;
procedureTForm1.Button5Click(Sender:
TObject);
begin
ifhWndC<>0thenbegin
SendMessage(hWndC,WM_CAP_STOP,0,0);
end;
end;
procedureTForm1.FormClose(Sender:
TObject;varAction:
TCloseAction);
begin
ifhWndC<>0thenbegin
SendMessage(hWndC,WM_CAP_DRIVER_DISCONNECT,0,0);
end;
end;
end.
假如电脑没有摄像头,但又想看看程序的效果,可以么?
呵呵,当然可以,找个虚拟摄像头不就搞定,大家可以试试SoftCam这个软件,它是一个名副其实的软件摄像机,
能模拟成为“真实的”摄像机,提醒一下各位,大家可不要用这个东东用在QQ,MSN等聊天软件上欺骗MM或GG啊。
关于摄像头编程,大家也可以看看这组VCL组件:
DSPack,DSPack是一套使用微软DirectShow和DirectX技术的类和组件,设计工作于DirectX9,支持系统Win9X,ME,2000和WindowsXP。
好了,就介绍这些了,至于视屏聊天怎么实现,就看你的了,无非是按数据压缩传输给对方,显示出来,不过话又说回来,看似简单,实现起来还有些难度的。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Delphi 编程 控制 摄像头