有用过videoforwin视频控件(VFW)的吗?教教我怎么用。可者给出它的网站。3Q 如题。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个网上就太多了,用VFP一SOU到处都是 http://www.21ic.com/new_info/news/files/news/2003112822940.asphttp://www.ccw.com.cn/pub/ChFileSubmit.asp?tablename=TFileCcwNet&recordno=3796http://www.swissdelphicenter.ch/torry/showcode.php?id=1309下面以一个一帧一帧地从视频设备上捕获视频数据的Delphi程序为例,来说明每个函数的作用以及开发过程。 该程序的功能是可以在屏幕上显视捕获到的视频,并可以获得每一帧的图像数据。 新建一个工程,并将AVICAP32.PAS包含到USES中。 在Form1上放置一个TPanel控件,设Name为“gCapVideoArea”,该控件用于显示视频。再放置两个TButton控件,一个Name为“Openvideo”,另一个Name为“Closevideo”。 定义全局变量: var //定义捕获窗句柄 ghCapWnd: THandle; //可以得到视频数据指针的结构变量,用于回调函数中 VideoStr: LPVIDEOHDR; //用于设置设备属性的结构变量 CapParms: TCaptureParms; 在Name为“Openvideo”的TButton 的Click事件中写入以下代码: procedure TForm1.OpenvideoClick(Sender: TObject); begin //使用Tpanel控件来创建捕获窗口 ghCapWnd := CapCreateCaptureWindow ( PChar(‘KruwoSoft'), //捕获窗口的名字 WS_CHILD or WS_VISIBLE,//窗口样式 0, //X坐标 0, //Y坐标 gCapVideoArea.Width, //窗口宽 gCapVideoArea.Height, //窗口高 gCapVideoArea.Handle, //窗口句柄 0); //一般为0 {为了能够捕获视频帧,要启动一个捕获帧回调函数VideoStreamCallBack。捕获一个视频流或当前设备状态时分别使用以下函数: //捕获一个视频流 CapSetCallbackOnVideoStream; //得到一个设备错误 CapSetCallbackOnError; //得到一个设备状态 CapSetCallbackOnStatus } //定义一个帧捕获回调函数 CapSetCallbackOnFrame (ghCapWnd,LongInt(@VideoStreamCallBack)); //将一个捕获窗口与一个设备驱程相关联,第二个参数是个序号,当系统中装有多个显视驱动程序时,其值分别依次为0到总个数 CapDriverConnect(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 := FALSE; 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); //将捕获窗同驱动器断开 capDriverDisconnect(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; 请问AVICAP32.PAS文件从哪儿搞来的呀? 邮件导出问题。关于outlook和OE 请问在用fastreport时,如何根据Memo的字段长度动态更改MasterData的高度? 如何知道数据库表中哪个字段为关键字段与允许空值得字段(在线) 求救,求救!有关DBChart中坐标定位的问题! Delphi到底哪种程度才可以见人? *****有什么办法加密数据库和表吗?***** 程序员是吃青春饭的吗? 查询结果生成报表的问题,及时结贴,再线等。 在程序中如何为表添加和删除字段? 我的程序窗体图标不见了 一个纯粹的语法问题 为何fastreport 2.5 里面的“print if detail empty"属性不能用
该程序的功能是可以在屏幕上显视捕获到的视频,并可以获得每一帧的图像数据。
新建一个工程,并将AVICAP32.PAS包含到USES中。
在Form1上放置一个TPanel控件,设Name为“gCapVideoArea”,该控件用于显示视频。再放置两个TButton控件,一个Name为“Openvideo”,另一个Name为“Closevideo”。
定义全局变量:
var
//定义捕获窗句柄
ghCapWnd: THandle;
//可以得到视频数据指针的结构变量,用于回调函数中
VideoStr: LPVIDEOHDR;
//用于设置设备属性的结构变量
CapParms: TCaptureParms;
在Name为“Openvideo”的TButton 的Click事件中写入以下代码:
procedure TForm1.OpenvideoClick(Sender: TObject);
begin
//使用Tpanel控件来创建捕获窗口
ghCapWnd := CapCreateCaptureWindow
( PChar(‘KruwoSoft'), //捕获窗口的名字
WS_CHILD or WS_VISIBLE,//窗口样式
0, //X坐标
0, //Y坐标
gCapVideoArea.Width, //窗口宽
gCapVideoArea.Height, //窗口高
gCapVideoArea.Handle, //窗口句柄
0); //一般为0
{为了能够捕获视频帧,要启动一个捕获帧回调函数VideoStreamCallBack。捕获一个视频流或当前设备状态时分别使用以下函数:
//捕获一个视频流
CapSetCallbackOnVideoStream;
//得到一个设备错误
CapSetCallbackOnError;
//得到一个设备状态
CapSetCallbackOnStatus
}
//定义一个帧捕获回调函数
//将一个捕获窗口与一个设备驱程相关联,第二个参数是个序号,当系统中装有多个显视驱动程序时,其值分别依次为0到总个数
CapDriverConnect(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 := FALSE;
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);
//将捕获窗同驱动器断开
capDriverDisconnect(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;