基于VFW的MFC编程实现简易摄像头抓拍

 

做了个MFC小程序,实现调用VFW来实现简易抓拍。

初衷是可以像本本自带的摄像头拍照一样,可以视频也可以把当前的一帧图像拍下来保存起来。初次使用VFW,刚开始找调用函数,在网上一搜是挺多的,但我不可能一个一个去试,最后花费了些时间找出了可用的一点调用摄像头驱动,实现视频浏览的代码。第一个目的达到后,开始找保存图像的代码,很多资料都是怎么保存视频为avi格式文件,离我的简单保存为bmp文件还是有些出入。最后终于找到了一个从当前帧保存为bmp文件的函数,就是capFileSaveDIB,很简单的一个函数BOOL capFileSaveDIB( hwnd, szName )。最后跟大家共享这份代码,给急急忙忙寻找代码,快速达到跟我相同目的的朋友。

第一步:

在对话框类头文件开头包含进Vfw.h文件,再在工程设置中包含进Vfw32.lib文件。

第二步:

在对话框类头文件中定义一个句柄HWND   m_hWndVideo; //视频显示窗口句柄,再在对应cpp文件中的OnInitDialog()中填入代码,如:

//创建预览窗口

   m_hWndVideo = capCreateCaptureWindow((NULL,WS_POPUP,1,1,10,10,m_hWnd,0);

   //连接驱动程序

   if(capDriverConnect(m_hWndVideo,0)) {
    ::SetParent(m_hWndVideo,*this);
    ::SetWindowLong(m_hWndVideo,GWL_STYLE,WS_CHILD);
    CRect wndRC;
    m_Panel.GetClientRect(wndRC);
    m_Panel.MapWindowPoints(this,wndRC);
    wndRC.DeflateRect(1,1,1,1);
    ::SetWindowPos(m_hWndVideo,NULL,wndRC.left,
     wndRC.top,wndRC.Width(),wndRC.Height(),SWP_NOZORDER);
    ::ShowWindow(m_hWndVideo,SW_SHOW);
    capPreviewRate(m_hWndVideo,20);
    capPreview(m_hWndVideo,TRUE);
   }

这样实现了简单的视频浏览功能。

第三步:

保存当前帧为bmp文件:

char day[256],time[256];
 _strtime(time),_strdate(day);
 strcat(day,time);
 int len=strlen(day);
 for(int i=0,j=0;i<len;i++) {
  if(day[i]!=':' && day[i]!='/') day[j++]=day[i];
 }
 day[j]='\0';
 strcat(day,".bmp");
 capFileSaveDIB(m_hWndVideo,day);

第四步:

关闭程序时要跟摄像头驱动断开:

capDriverDisconnect(m_hWndVideo);

这样,所有的目的都达到了。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值