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,如果你想要更深入的開發,你可以網上搜索文檔有很多,這里僅僅拋磚引玉了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM