VC++ 6.0实现视频捕捉(VFW)
一、Vedio for Windows 简介
Vedio for Windows 是WIN32 SDK 中多媒体编程SDK 的视频开发工具。在微软的Visual C ++中提供了Vedio for Windows 的头文件vfw.h 和库文件vfw32.lib。表1 列出了VFW 中视频捕捉编程常用的一些VFW 函数和宏。
二、用VC ++6.0 实现视频捕捉的编程实例
下面结合实例,说明对视频捕捉编程的具体实现方法。
1、用Visual C ++的AppWizard 生成一个基于对话框的应用程序,并在StdAfx.h 中加入以下内容:
#include < vfw.h >
#pragma comment(lib,"vfw32.lib")
2、修改对话框资源,添加静态控制IDC_VIDEO 和按钮“捕捉”、“停止”、“设置格式”、“设置图像源”、“设置压缩”、“单帧捕获”、“定帧”、“退出”。
(其实最重要的是“设置格式”、“设置图像源”、“设置压缩”、“单帧捕获”、“退出”,其它可以将其设置成不可见,同时也可将其保留,以便将来扩展其功能时可用。)
3、在对话框的头文件中加入以下说明。
HWND m_hCapWnd;// 预示窗口
BOOL m_bInit;// 捕捉器初始化
CAPDRIVERCAPS m_CapDrvCap;// CAPDRIVERCAPS 结构,定义驱动器性能
CAPSTATUS m_CapStatus;// CAPSTATUS 结构,定义捕捉窗口当前状态
CAPTUREPARMS m_Parms;// CAPTURE PARMS 结构,定义捕捉参数
CString m_CapFileName;// 捕捉文件名称
4、在对话框类的OnInitDialog() 函数中加入捕捉器初始化以及连接驱动器。
m_bInit=FALSE;
CWnd *pWnd=AfxGetMainWnd() ->GetDlgItem(IDC_VIDEO); // 得到预示窗口指针
CRect rect;
pWnd ->GetWindowRect( &rect); // 得到窗口大小
m_hCapWnd=capCreateCaptureWindow((LPTSTR)TEXT("视频捕捉测试程序"),WS_CHILD|WS_VISIBLE|WS_EX_CLIENTEDGE|WS_EX_DLGMODALFRAME,0,0,rect.Width(),rect.Width(),pWnd ->GetSafeHwnd(),0); // 设置预示窗口
ASSERT(m_hCapWnd);
if(capDriverConnect(m_hCapWnd,0)){// 连接第0 号驱动器
m_bInit=TRUE;
// 得到驱动器的性能
capDriverGetCaps(m_hCapWnd,sizeof(CAPDRIVE RCAPS), &m_CapDrvCap);
if(m_CapDrvCap.fCaptureInitialized){
// 如果初始化成功
capGetStatus(m_hCapWnd, &m_CapStatus,sizeof(m_CapStatus)); // 得到驱动器状态
capPreviewRate(m_hCapWnd,30); // 设置预示帧频
capPreview(m_hCapWnd,TRUE); // 设置预示方式
}
else{// 初始化未成功
AfxMessageBox("视频捕捉卡初始化失败!");
AfxGetMainWnd() ->PostMessage (WM_CLOSE);
}
}
else{// 未能连接到驱动器
AfxMessageBox("与视频捕捉卡连接失败!");
AfxGetMainWnd() ->PostMessage(WM_CLOSE);
}
m_CapFileName="c:\\Capture.avi";// 设置捕获文件
capFileSetCaptureFile(m_hCapWnd,m_CapFileName.GetBuffer(255));
5、在对话框类中加入响应“设置格式”消息的函数OnFormat()。
capDlgVideoFormat(m_hCapWnd);// 设置格式对话框
6、在对话框类中加入响应“设置图像源”消息的函数OnSource()。
capDlgVideoSource(m_hCapWnd);// 设置图像源对话框 //单独调用可以配置图像源
7、在对话框类中加入响应“设置压缩”消息的函数OnCompress()。
capDlgVideoCompression(m_hCapWnd);// 设置压缩对话框
8、在对话框类中加入响应“捕捉”消息的函数OnCapture()。
capCaptureGetSetup(m_hCapWnd, &m_Parms,sizeof(m_Parms));// 得到设置参数
if(capCaptureSetSetup(m_hCapWnd, &m_Parms,sizeof(m_Parms))==TRUE){
BOOL suc=TRUE;
suc=capCaptureSequence(m_hCapWnd); // 捕捉到文件
return suc};
else
return FALSE;
注意点:在VideoCaptureDlg.h中把afx_msg void OnCapture();改为afx_msg BOOL OnCapture();
在VideoCaptureDlg.cpp 修改为BOOL CVideoCaptureDlg::OnCapture() //捕捉
9、在对话框类中加入响应“定帧”消息的函数OnFreezed()。
capPreview(m_hCapWnd,FALSE);// 定帧
10、在对话框类中加入响应“单帧捕获”消息的函数OnImage()。
capGrabFrameNoStop(m_hCapWnd);// 截获当前图像
capEditCopy(m_hCapWnd);// 将图像拷贝到剪贴板
11、在对话框类中加入响应“停止”消息的函数OnStop()。
capCaptureStop(m_hCapWnd);// 停止捕捉
12、在对话框类中加入响应“退出”消息的函数OnExit()退出前断开捕捉器与驱动器的连接,并关闭窗口。
capDriverDisconnect(m_hCapWnd);
CDialog::OnCancel();
附加说明:以上添加的按钮用于捕捉图像(button);
另外添加(Static Text)用于创建并设置捕获窗口;
保存图像的方法:点击“单帧捕获”——>打开附近里的“画图”——>“编辑”中的“粘贴”——>即可保存捕捉的位图。
以上方法主要是采用了VFW的函数和宏,有兴趣的朋友可以尝试用消息的方法,同样也可以实现。
如:SendMessage (hWndC, WM_CAP_DRIVER_CONNECT, 0, 0L);//用于连接设备
要做的就是根据相关的功能改变相应的参数就可以了。
当然,在这过程中肯定会遇到很多问题的,我刚开始编译的时候出现了一百多个错误,耐心调通也就不难了。
下面的图是几幅界面图,可做参考。
VC++ 6.0实现视频捕捉(VFW)相关推荐
- 用VC++ 6.0实现视频捕捉
用VC++ 6.0实现视频捕捉 发布: 2007-7-04 20:47 | 作者: admin | 来源: 网友评论 | 查看: 151次 | 进入软件测试论坛讨论 领测软件测试网 刘力天 方 兰 本 ...
- 视频捕捉全教程(vc+vfw)
视频捕捉全教程(vc+vfw) 目 录 一. 视频捕获快速入门 二.基本的捕获设置 1.设置捕获速度: 2.设置终止捕获 3.捕获的时间限制 三.关于捕获窗口 1.创建一个AVICAP捕获窗口 2.将 ...
- [转]视频捕捉全教程(vc+vfw)
目 录 一. 视频捕获快速入门 二.基本的捕获设置 1.设置捕获速度: 2.设置终止捕获 3.捕获的时间限制 三.关于捕获窗口 1.创建一个AVICAP捕获窗口 2.将一个捕获窗口连接至捕获设备 3. ...
- 视频捕捉全教程(MFC+vfw)
视频捕捉全教程(vc+vfw) 目 录 一. 视频捕获快速入门 二.基本的捕获设置 1.设置捕获速度: 2.设置终止捕获 3.捕获的时间限制 三.关于捕获窗口 1.创建一个AVICAP捕获窗口 2.将 ...
- [转]DirectShow应用——视频捕捉WDM Vs VFW
本文转自:http://bbs.njupt.edu.cn/cgi-bin/bbsanc?path=/groups/computer.faq/MultiMedia/D52F2B929/D99113C57 ...
- vfw视频捕捉显示黑屏解决办法
最近做一个项目要用到视频捕捉,所以使用vfw进行win32下的开发.使用笔记本运行程序,运行时笔记本摄像头可以正常亮起,但是捕捉区域是黑色的.把程序发到同学电脑上可以正常显示图像,发现那就是电脑的设置 ...
- VFW---摄像头视频捕捉函数解析
VFW---摄像头视频捕捉函数解析 #include <vfw.h> #pragma comment(lib, "Vfw32.lib") 初始化操作 1.创建捕获窗口 ...
- VC6.0(VC++6.0)使用教程(使用VC6.0编写C语言程序)
VC6.0(VC++6.0)使用教程(使用VC6.0编写C语言程序) Visual C++ 6.0简称VC或者VC6.0,是微软1998年推出的一款C/C++ IDE,界面友好,调试功能强大.VC6. ...
- 关于 web cam 使用自家的摄像头实现 视频捕捉技术 高级篇
网络上一大堆的视频捕捉代码,比如: 代码 public class WebCameraEngine { // showVideo calls [D ...
- 基于USB2.0的视频图像处理芯片实现方案
摘 要:实时图像处理是图像处理领域的一个热点.给出了一种基于USB2.0 的视频图像处理芯片的实现方案,首先介绍了系统的整体设计框架,然后针对框架内核心模块阐述了相应的硬件实现原理,最后以Xilinx ...
最新文章
- 亲近自然的加州玻璃豪宅
- DOS系统功能调用表(INT 21H)
- C++实现有序表折半查找
- 车载电脑中控软件_数字图书馆智能化系统集成-ipad中控软件
- 高通cpu排行_安卓手机芯片排行:麒麟990 5G仅排第三,980还输给了765G?
- 内核中的UDP socket流程(1)
- 如何更换和删除微软雅黑字体
- 英文构词词根表---不定式+过去式+过去分词
- 牛文文点评长租公寓行业:过度金融化会毁灭整个行业
- 从 Factor Zoo 到 Factor War,实证资产定价走向何方?
- ArcGIS操作Excel文件没有注册类解决办法
- shell 脚本中日期运算
- app启动速度优化实践
- MySQL主从状态检查
- librosa 语音库(三) librosa.feature. 中的 spectrogram 与 melspectrogram
- r5处理器_入门级游戏党核显平台!R5-3400G核显游戏组装配置清单
- 用Python吐槽国产综艺节目!
- 羌笛声声胡笳怨,此心长寄天涯远
- c语言|直角杨辉三角
- (转载)机器学习方法的PPT