基于Delphi的VFW视频捕获程序的开发

[10-10 20:38:44]   来源:http://www.88dzw.com  电子制作   阅读:8294

文章摘要:CapSetCallbackOnError; //得到一个设备错误CapSetCallbackOnStatus //得到一个设备状态//定义一个帧捕获回调函数CapSetCallbackOnFrame (ghCapWnd,LongInt(@VideoStreamCallBack));//将一个捕获窗口与一个设备驱动相关联,第二个参数是个序号,当系统中装有多个显示驱动程序时,其值分别依次为0到总个数CapDreiverConnect(ghCapWnd,0);CapParms,dwRequestMicroSecPerFrame:=40000;CapParms.fLimitEnabled:=FALS

基于Delphi的VFW视频捕获程序的开发,标签:电子小制作,http://www.88dzw.com

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] [3] 


Tag:电子制作电子小制作维修教程知识 - 电子制作

《基于Delphi的VFW视频捕获程序的开发》相关文章