首 页       用户登录  |  用户注册
设为首页
加入收藏
联系我们
按字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
按声母检索 A B C D E F G H J K L M N O P Q R S T W X Y Z 数字 符号
您的位置: 5VAR论文频道论文中心理工论文电子通信
   基于Delphi的VFW视频捕获程序的开发      ★★★ 【字体: 】  
基于Delphi的VFW视频捕获程序的开发
收集整理:佚名    来源:本站整理  时间:2009-01-10 23:55:08   点击数:[]    

面的特殊需求,笔者选用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;

CapOverlay(ghCapWnd,1);

CapPreview(ghCapWnd,1);

End;

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

procedure TForm1.ClosevideoClick(Sender:Tobject);

begin

capCaptureAbort(ghCapWnd); //停止捕获

capDriveDisconnect(ghCapWnd); //将捕获窗同驱动器断开

end;

定义捕获帧回调函数:

function FrameCallBack(hWnd:HWND;lpVHdr:LongInt):LongInt;stdcall;

var

DataPoint:^byte;

DibLen,RectWidth,RectHeight:integer;

begin

VideoStr:=LPVIDEOHDR(lpVHdr);

DibLen:=VideoStr^.dwBufferLength;

GetMem(DataPoint,64000);

//将帧数据COPY到一个内存中,注意:DATAPOINT要先分配空间

CopyMemory(DataPoint,VideoStr^.lpData,Diblen);

……

end;

4 结束语

灵活地使用AVICap窗口类的回调函数可以满足各种需求,但要注意从视频卡中捕获的视频数据的格式和图像的长宽要参考视频卡的参数。另外,有些视频卡通过设置可支持多种格式和图像长宽,所以,在还原图像时,要注意参考所用的视频卡的参数。




上一页  [1] [2] 


Tags:


文章转载请注明来源于:5VAR论文频道 http://paper.5var.com。本站内容整理自互联网,如有问题或合作请Email至:support@5var.com
或联系QQ37750965
提供人:佚名
  • 上一篇文章:漫谈失真

  • 下一篇文章:媒体信号处理器MAP-CA及其应用实例
  • 返回上一页】【打 印】【关闭窗口
    中查找“基于Delphi的VFW视频捕获程序的开发”更多相关内容 5VAR论文频道
    中查找“基于Delphi的VFW视频捕获程序的开发”更多相关内容 5VAR论文频道
    最新热点 最新推荐 相关新闻
  • ››嵌入式系统的通信规约管理平台设计...
  • ››一种基于七号信令的局间话单采集系...
  • ››对于变频器的制动技术分析
  • ››电子文件管理元数据宏观结构多维分...
  • ››浅论卫星电视接收机的常见故障的检...
  • ››信息时代网络用户信息检索焦虑的心...
  • ››论GIS在高校房产管理中的实际应用
  • ››关于电力通信发展战略的思考 金李莎...
  • ››2G、3G切换精细化优化分析思路探讨...
  • ››光纤自动化生产的需求与时机
  • ››基于Delphi的VFW视频捕获程序的开发...
  • ››基于DELPHI的镍氢电池管理系统软件...
  •   文章-网友评论:(评论内容只代表网友观点,与本站立场无关!)
    关于本站 - 网站帮助 - 广告合作 - 下载声明 - 网站地图
    Copyright © 2006-2033 5Var.Com. All Rights Reserved .