先貼上一張圖吧,如果你覺得有幫助就繼續參考下面的步驟吧
開發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,如果你想要更深入的開發,你可以網上搜索文檔有很多,這里僅僅拋磚引玉了。