【vc++精品源码栏目提醒】:网学会员vc++精品源码为您提供VC捕捉摄像头图像入门源码 - 其它资料参考,解决您在VC捕捉摄像头图像入门源码 - 其它资料学习中工作中的难题,参考学习。
【转】VC 捕捉摄像头图像入门源码VC 捕捉摄像头图像入门源码(非常适合新手)转默认分类 2009-11-02 17:46:56 阅读 39 评论 0 字号:大中小//此源码是我更改过的基于 VFWVideo for Windows的源码,使用了定时器能实时的显示图像,从网上可搜到原版源码,但是原版的功能是保存为一个文件,且不能实时显示,此版本虽然能显示,但感觉反应速度不是很快,没有基于DirectShow 的程序更新速度快,不过在 WM_PAINT 消息处理里加while1capGrabFrameghWndCap刷新速度就快很多了,但是这样程序就进入死循环不能再处理其他消息,至于怎样改进,就靠读者你了。
//源码的任何部分都可以在 MSDN 里查到,请参考 MSDN。
include ltwindows.hgtinclude ltstdio.hgtinclude ltvfw.hgtpragma commentlibquotvfw32.libquotHWND ghWndCap //捕获窗的句柄CAPSTATUS gCapStatus //捕获窗的状态CAPDRIVERCAPS gCapDriverCaps //视频驱动的能力char gachBuffer20//char szCaptureFile quotCamCapture.AVIquot///////////////////////////////////////////////////////////////////////// StatusCallbackProc: 状态回调函数使用 capSetCallbackOnStatus 宏来注册这个回调函数。
// hWnd: 捕获窗体句柄// nID: 当前状态的状态码// lpStatusText: 当前状态的文本字符///////////////////////////////////////////////////////////////////////LRESULT CALLBACK StatusCallbackProcHWND hWndint nIDLPSTRlpStatusTextifghWndCap return FALSE//获得捕获窗的状态capGetStatusghWndCapampgCapStatussizeofCAPSTATUS//更新捕获窗的大小得到消息 WM_CAP_GET_STATUSSetWindowPosghWndCapNULL00gCapStatus.uiImageWidthgCapStatus.uiImageHeightSWP_NOZORDERSWP_NOMOVEifnID0//清除旧的状态信息 SetWindowTextghWndCapLPSTRquothelloquot return LRESULTTRUE//显示状态 ID 和状态文本wsprintfgachBufferquotStatus d: squotnIDlpStatusTextSetWindowTextghWndCapLPSTRgachBufferreturn LRESULTTRUE//////////////////////////////////////////////////////////////////////////////// ErrorCallbackProc: 错误回调函数过 capSetCallbackOnError 宏来
注册回调// hWnd: 捕获窗口句柄// nErrID: 错误代码// lpErrorText: 关于错误的文本信息///////////////////////////////////////////////////////////////////////////////LRESULT CALLBACK ErrorCallbackProcHWND hWndint nErrIDLPSTRlpErrorTextifghWndCap return FALSE ifnErrID0 return TRUE//清除旧的错误wsprintfgachBufferquotError dquotnErrID//显示错误标识和文本MessageBoxhWnd lpErrorText gachBufferMB_OK MB_ICONEXCLAMATIONreturn LRESULT TRUE//////////////////////////////////////////////////////////////////////////////// FrameCallbackProc: 帧回调函数通过 capSetCallbackFrame 宏来注册回调函数// hWnd: 捕获窗体句柄// lpVHdr: 指向一个包含帧信息的数据结构体/////////////////////////////////////////////////////////////////////////////////LRESULT CALLBACK FrameCallbackProcHWND hWndLPVIDEOHDR lpVHdrFILE fpfpfopenquotcaram.datquotquotwquotifghWndCap return FALSE//假设 fp 为一打开的.dat 文件指针fwritelpVHdr-gtlpData1lpVHdr-gtdwBufferLengthfpreturn LRESULTTRUE////////////////////////////////////////////////////////////////////////////////TimerProc 函数处理定时器,在这里抓取并显示图像//////////////////////////////////////////////////////////////////////////////VOID CALLBACK TimerProc HWND hwnd // handle to window UINT uMsg // WM_TIMER message UINT_PTR idEvent // timer identifier DWORD dwTime // current system time capGrabFrameghWndCap////////////////////////////////////////////////////////////////////主回调函数//////////////////////////////////////////////////////////////////LRESULT CALLBACK WindowProc HWND hwnd // handle to window UINT uMsg // message identifier WPARAM wParam // first message parameter LPARAM lParam // second message parameter // HDC hdc// PAINTSTRUCT ps// RECT rectswitchuMsgcase WM_CREATE: ghWndCapcapCreateCaptureWindowLPSTRquotCaptureWindowquotWS_CHILDWS_VISIBLE00320240HWNDhwndint0 capSetCallbackOnErrorghWndCapFARPROCErrorCallbackProc capSetCallbackOnStatusghWndCapFARPROCStatusCallbackProc capSetCallbackOnFrame