MFC下用VFW实现控制摄像头录像和拍照
先贴上一张图吧,如果你觉得有帮助就继续参考下面的步骤吧
开发vfw程序时,我们需要vfw.h和vfw32.lib这两个文件,很多人会去网上下载,但是网上基本上很难找到,其实在安装了vs后我们就已经拥有了这两个文件,如果你需要找出来的话你可以在vs文件夹下搜索即可,没找出来也不碍事的。下面就开始吧
1.创建基于对话框的MFC应用程序,基本功不多说。
2.添加头文件和绑定库文件于XXXXDlg.cpp文件中
#include "vfw.h"
#pragma comment(lib, "vfw32")
3.在资源对话框里布局如上图,左边的视频区域用的是静态文本框,也可以用picture控件
4.启动视频连接(如果你不是通过按钮控制实现,是打开就实现那么将下面代码写在OnInitDialog()里面),添加按钮事件,你可以双击按钮实现(下面一样)
CWnd *pwnd = this->GetDlgItem(IDC_VIEW);//这里的IDC_VIEW是静态文本的ID
CRect rect;
pwnd->GetClientRect(&rect);
m_myCapWnd = capCreateCaptureWindow("视频测试",WS_CHILD|WS_VISIBLE|WS_DLGFRAME,0,0,rect.Width(),rect.Height(),pwnd->GetSafeHwnd(),0);
if(m_myCapWnd==NULL)
{
AfxMessageBox("视频窗口创建失败!");
return;
}
while(!capDriverConnect(m_myCapWnd,0))
{
capDriverConnect(m_myCapWnd,0);//可以不要while,而直接使用这句
}//成功为止
//capDriverConnect(m_myCapWnd,0);
CAPDRIVERCAPS caps;
capDriverGetCaps(m_myCapWnd,sizeof(CAPDRIVERCAPS),&caps);
if(caps.fCaptureInitialized)
{
CAPSTATUS status;
capGetStatus(m_myCapWnd,&status, sizeof(CAPSTATUS));
capPreviewRate(m_myCapWnd,30);
capPreviewScale(m_myCapWnd,TRUE);//设置视频比例,使视频完全显示出来,若设为false则显示部分画面出来
capPreview(m_myCapWnd,TRUE);//视频预览,即视频出现了
}
5.断开视频连接并退出程序
capDriverDisconnect(m_myCapWnd);
CDialog::OnCancel();
6.拍照并保存这张图片
if(capGrabFrameNoStop(m_myCapWnd)==TRUE && capFileSaveDIB(m_myCapWnd,"cutbmp.jpg")==TRUE)//可以指定路径,否则是当前项目里
{
AfxMessageBox("拍照成功,并已保存!");
}
else
{
AfxMessageBox("拍照失败或者保存失败,请再次尝试,或者重新连接摄像头!");
}
7.设置视频源等
capDlgVideoSource(m_myCapWnd);
capDlgVideoDisplay(m_myCapWnd);
8.设置格式
capDlgVideoFormat(m_myCapWnd);
capDlgVideoDisplay(m_myCapWnd);
9.设置压缩
capDlgVideoCompression(m_myCapWnd);
capDlgVideoDisplay(m_myCapWnd);
10.开始录像并保存于一个文件
capFileSetCaptureFile(m_myCapWnd,"video.avi");
capCaptureSequence(m_myCapWnd);
11.停止录像
capCaptureStop(m_myCapWnd);
好了 ,最基本的能实现了,其它的按钮功能需要另写代码,这里就不多说了,毕竟这里的主角是vfw,如果你想要更深入的开发,你可以网上搜索文档有很多,这里仅仅抛砖引玉了。

浙公网安备 33010602011771号