L
lngdtommy
Unregistered / Unconfirmed
GUEST, unregistred user!
现要做一摄象头图象捕获,经在网上多方查找,找到如下代码,好象少个AVICAP32.PAS文件,但我找了个VFW.PAS来代替,可惜运行后错误一大堆,请问错如何解决?
另外谁有AVICAP32.PAS能发给我一份吗?我的E_mail:sdtrm@126.com。谢谢!
var //全局变量
ghCapWnd:Thandle; //定义捕获窗句柄
VideoStr:LPVIDEOHDR; //可以得到视频数据指针的结构变量,用于回调函数中
CapParms:TcaptureParms; //用于设置设备属性的结构变量
procedure TForm1.OpenvideoClick(Sender: TObject);
begin //使用Tpanel控件来创建捕获窗口
ghCapWnd:=CapCreateCaptureWindow(Pchar('KruwoSoft'),WS_CHILD or WS_VISIBLE,0,0,gCapVideoArea.Width,gCapVideoArea.Height,gCapVideoArea.Handle,0);
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,true);
CapPreviewRate(ghCapWnd,66);
//如果要捕获视频流,则要使用函数来指定不生成文件。否则将会自动生成AVI文件:
CapCaptureSequenceNoFile(ghCapWnd);
//指定是否使用叠加模式,true为使用,否则为false;
CapOverlay(ghCapWnd,true);
CapPreview(ghCapWnd,true);
end;
function FrameCallBack(hWnd:HWND;lpVHdr:LongInt):LongInt;stdcall EXTERNAL 'AVICAP32.DLL';
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能发给我一份吗?我的E_mail:sdtrm@126.com。谢谢!
var //全局变量
ghCapWnd:Thandle; //定义捕获窗句柄
VideoStr:LPVIDEOHDR; //可以得到视频数据指针的结构变量,用于回调函数中
CapParms:TcaptureParms; //用于设置设备属性的结构变量
procedure TForm1.OpenvideoClick(Sender: TObject);
begin //使用Tpanel控件来创建捕获窗口
ghCapWnd:=CapCreateCaptureWindow(Pchar('KruwoSoft'),WS_CHILD or WS_VISIBLE,0,0,gCapVideoArea.Width,gCapVideoArea.Height,gCapVideoArea.Handle,0);
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,true);
CapPreviewRate(ghCapWnd,66);
//如果要捕获视频流,则要使用函数来指定不生成文件。否则将会自动生成AVI文件:
CapCaptureSequenceNoFile(ghCapWnd);
//指定是否使用叠加模式,true为使用,否则为false;
CapOverlay(ghCapWnd,true);
CapPreview(ghCapWnd,true);
end;
function FrameCallBack(hWnd:HWND;lpVHdr:LongInt):LongInt;stdcall EXTERNAL 'AVICAP32.DLL';
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;