这类捕捉卡一般都支持vfw和directshow两种方式, 普通的usb摄像头90%以上的都不支持wdm(directshow);一般支持vfw和twain;
你可以用vfw的方式。
下面就是例子:(需要头文件vfw,c++builder里面已经自带,delphi 可以在网上下载;
如果 你认为麻烦, 你可以自己对cap32.dll申明这几个函数,如果需要 我可以email给你);
//其它的功能这里就不一一阐述
m_hCapWnd:Hwnd;
procedure TForm1.create(Sender: TObject); // 视频扑获处理
var
dwSize:Integer;
setBmp : BITMAPINFO ;
begin
try
m_hCapWnd:=capCreateCaptureWindow('',
WS_CHILD or WS_VISIBLE,0,0,AviPanel.width,AviPanel.height,AviPanel.Handle,0);
//avipanel 就是你要显示的视频窗口的;可以是form ,panel等
//AviPanel.width就是显示的宽度,AviPanel.height显示的高度;
if(capDriverConnect(m_hCapWnd,0)) then
begin
// capOverlay(m_hCapWnd,true); //普通的摄像头不能用overlay的方式 主意;
capPreviewRate(m_hCapWnd,30); //设置帧率为30
capPreview(m_hCapWnd,true); // preview方式显示
dwSize:=capGetVideoFormatSize(m_hCapWnd);
capGetVideoFormat(m_hCapWnd,@setBmp, dwSize);
setBmp.bmiHeader.biWidth:=352; //这个就是设置你捕捉图片的大小了 宽度 :)
setBmp.bmiHeader.biHeight:=288; //这个就是设置你捕捉图片的大小了 高度 :)
capSetVideoFormat(m_hCapWnd,@setBmp,dwSize);
end;
except
end;
end;
procedure Tform1.capbmp;
begin
capEditCopy(m_hCapWnd); //把图像拷到剪贴板
Image1.picture.bitBmp.LoadFromClipboardFormat(CF_BITMAP,Clipboard.GetAsHandle(CF_BITMAP), 0);
// 这时在image1里面的就是你需要的图片;
end;
procedure TForm1.close(Sender: TObject; var Action: TCloseAction);// 视频扑获处理
begin
capDriverDisconnect(m_hCapWnd);// vfw 里面的标准函数
end;
如果要例子 可以email;