网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > DELPHI > 正文
Delphi利用VFW开发视频捕获程序
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/12
下载{$ArticleTitle}原创论文样式
可指定所用的文件名,并可将捕获文件的内容拷贝到另一个文件;

*设置捕获速率;

*显示控制视频源、视频格式及视频压缩的对话框;

*创建、保存或载入调色板;

*将图像和相关的调色板拷贝到剪贴板;

*将捕获的单帧图像保存到DIB格式文件。

(2)关联捕获窗和驱动程序

单独定义的捕获窗是不能工作的,它须与一个设备相关联才能取得视频信号。用函数CapDriver Connect可使捕获窗与其设备驱动程序相关联。

(3)设置视频设备的属性

通过设置TcaptureParms结构变量的各个成员变量,可以控制设备的采样频率、中断采样按键、状态行为。设置好TcaptureParms结构变量后,可以用函CapCaptureSetSetup使设置生效。之后还可以用CapPreviewScale、CapPreviewRate设置预览的比例与速度,也可以直接使用设备的默认值。

(4)打开预览

利用函数CapOverlay可选择是否采用叠加模式预览,以使系统资源占用小,视频显示速度加快。然后用CapPreview启动预览功能,这时就可以在屏幕上看到来自摄像机的图像了。

通过以上四步就可以建立一个基本的视频捕获程序,但如果想自己处理从设备捕获到的视频数据,则要使用捕获窗回调函数来处理,比如一帧一帧地获得视频数据或以流的方式获得视频数据等。

3 基于Delphi的视频捕获程序

根据系统对系统访问、处理速度等方面的特殊需求,笔者选用Delphi作为开发工具。下面以开发一个逐帧从视频设备上捕获视频数据的程序为例,来说明每个函数的作用以及开发的具体过程。所给例程的功能是可以在屏幕上显示捕获到的视频,并可以获得每一帧的图像数据。具体步骤如下:

(1)新建一个工程,并将AVICAP32.PAS包含到USES中。

(2)在Form1上放置一个Tpanel控件,设Name为“gCapVideoArea”,该控件用于显示视频。之后再放置两个Tbutton控件,一个Name为“Openvideo”,另一个Name为“Closevideo”。

(3)定义全局变量

ghCapWnd:Thandle; //定义捕获窗句柄

VideoStr:LPVIDEOHDR; //可以得到视频数据指针的结构变量,用于回调函数中

CapParms:TcaptureParms; //用于设置设备属性的结构变量

(4)编写代码

在Name为“Openvideo”的Tbutton的Click事件中写入以下代码:

procedure Tform1.OpenvidoClick(Sender:TObject);

begin

//使用Tpanel控件来创建捕获窗口

ghCapWnd:=CapCreateCaptureWindow(Pchar(''KruwoSoft''),

WS_CHILD or WS_VISIBLE, //窗口样式

0,//X坐标

0,//Y坐标

gCapVideoArea,Width, //窗口宽

gCapVideoArea,Handle, //窗口句柄

0); //一般为0

为了能够捕获视频,应启动一个捕获帧回调函数VideoStreamCallBack。捕获一个视频流或当前设备状态时,应分别使用以下函数:

CapSetCallbackOnVideoStream; //捕获一个视频流

CapSetCallbackOnError; //得到一个设备错误

CapSetCallbackOnStatus //得到一个设备状态

//定义一个帧捕获回调函数

CapSetCallbackOnFrame (ghCapWnd,LongInt(@VideoStreamCallBack));

//将一个捕获窗口与一个设备驱动相关联,第二个参数是个序号,当系统中装有多个显示驱动程序时,其值分别依次为0到总个数

CapDreiverConnect(ghCapWnd,0);

CapParms,dwRequestMicroSecPerFrame:=40000;

CapParms.fLimitEnabled:=FALSE;

CapParms.fCaptureAudio:=FALSE;//NO Audio

CapParms.fMCIControl:=FALSE;

CapParms.fYield:=TRUE;

CapParms.vKeyAbort:=VK_ESCAPE;

CapParms.fAbortLeftMouse:=FLASE;

CapParms.fAbortRightMouse:=FALSE;

//使设置生效

CapCaptureSetSetup(ghCapWnd,LongInt(@CapParms),sizeof(TCAPTUREPARMS));

CapPreviewScale(ghCapWnd,1);

CapPreviewRate(ghCapWnd,66);

如果要捕获视频流,则要使用函数来指定不生成文件。否则将会自动生成AVI文件:

CapCaptureSequenceNoFile(ghCapWnd);

指定是否使用叠加模式,1为使用,否则为0;

Cap

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号