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: 指向一个包含帧信息的数据结构体
/////////////////////////////////////////////////////////////////////
////////////
发布评论