2024年4月24日发(作者:)

【转】VC捕捉摄像头图像入门源码

VC捕捉摄像头图像入门源码(非常适合新手)(转)

默认分类 2009-11-02 17:46:56 阅读39 评论0 字号:大中小

//此源码是我更改过的基于VFW(Video for Windows)的源码,使用了定时器能

实时的显示图像,从网上可搜到原版源码,但是原版的功能是保存为一个文件,

且不能实时显示,此版本虽然能显示,但感觉反应速度不是很快,没有基于

DirectShow的程序更新速度快,不过在WM_PAINT消息处理里加

while(1){capGrabFrame(ghWndCap);}刷新速度就快很多了,但是这样程序就进

入死循环不能再处理其他消息,至于怎样改进,就靠读者你了。

//源码的任何部分都可以在MSDN里查到,请参考MSDN。

#include

#include

#include

#pragma comment(lib,"")

HWND ghWndCap ; //捕获窗的句柄

CAPSTATUS gCapStatus ; //捕获窗的状态

CAPDRIVERCAPS gCapDriverCaps ; //视频驱动的能力

char gachBuffer[20];

//char szCaptureFile[] = "";

/////////////////////////////////////////////////////////////////////

//

// StatusCallbackProc: 状态回调函数,使用capSetCallbackOnStatus宏来注

册这个回调函数。

// hWnd: 捕获窗体句柄

// nID: 当前状态的状态码

// lpStatusText: 当前状态的文本字符

/////////////////////////////////////////////////////////////////////

//

LRESULT CALLBACK StatusCallbackProc(HWND hWnd,int nID,LPSTR

lpStatusText)

{

if(!ghWndCap)

return FALSE;//获得捕获窗的状态

capGetStatus(ghWndCap,&gCapStatus,sizeof(CAPSTATUS));//更新捕获窗的大

小,得到消息WM_CAP_GET_STATUS

SetWindowPos(ghWndCap,NULL,0,0,eWidth,

mageHeight,SWP_NOZORDER|SWP_NOMOVE);

if(nID==0){//清除旧的状态信息

SetWindowText(ghWndCap,(LPSTR)"hello");

return (LRESULT)TRUE;

}//显示状态ID和状态文本

wsprintf(gachBuffer,"Status# %d: %s",nID,lpStatusText);

SetWindowText(ghWndCap,(LPSTR)gachBuffer);

return (LRESULT)TRUE;

}

/////////////////////////////////////////////////////////////////////

/////////

// ErrorCallbackProc: 错误回调函数,过capSetCallbackOnError宏来注册

回调

// hWnd: 捕获窗口句柄

// nErrID: 错误代码

// lpErrorText: 关于错误的文本信息

/////////////////////////////////////////////////////////////////////

//////////

LRESULT CALLBACK ErrorCallbackProc(HWND hWnd,int nErrID,LPSTR

lpErrorText)

{

if(!ghWndCap)

return FALSE;

if(nErrID==0)

return TRUE;//清除旧的错误

wsprintf(gachBuffer,"Error# %d",nErrID);//显示错误标识和文本

MessageBox(hWnd, lpErrorText, gachBuffer,MB_OK | MB_ICONEXCLAMATION);

return (LRESULT) TRUE;

}

/////////////////////////////////////////////////////////////////////

/////////

// FrameCallbackProc: 帧回调函数,通过capSetCallbackFrame宏来注册回

调函数

// hWnd: 捕获窗体句柄

// lpVHdr: 指向一个包含帧信息的数据结构体

/////////////////////////////////////////////////////////////////////

////////////