9.2.3 界面设计(2)
获取视频显示窗口的句柄,根据程序最初枚举到的所有采集设备,选择用户选中的采集设备。调用视频捕获类的成员函数PreviewImages完成整个视频的采集、显示任务。图9-10所示为"视频预览"按钮实现的效果图。
|
| (点击查看大图)图9-10 视频预览 |
双击"视频捕获"按钮,添加事件处理代码。
void CCaptureVideoDlg::OnBnClickedCapture() { //TODO: 在此添加控件通知处理程序代码 CString strFilter = _T("AVI File (*.avi) | *.avi|"); //文件类型过滤器 strFilter += "All File (*.*) | *.*|"; CFileDialog dlg(TRUE, NULL, NULL, //打开另存为文件对话框 OFN_PATHMUSTEXIST| OFN_HIDEREADONLY, strFilter, this); if (dlg.DoModal() == IDOK) { CString m_sourceFile = dlg.GetPathName(); //获取用户输入的文件路径名 m_cap.CaptureImages(m_sourceFile); //开始捕获、存储视频 } }
|
存储捕获的视频,这里采用AVI格式,视频数据未经压缩。调用视频捕获类CCaptureClass的成员函数CaptureImages完成视频的捕获、存储任务。本案例需要先预览视频,然后再开始捕获、存储视频,不能直接捕获、存储视频。双击"视频格式"按钮,添加事件处理代码。
void CCaptureVideoDlg::OnBnClickedVideoFormat() { //TODO: 在此添加控件通知处理程序代码 m_cap.ConfigCameraPin(this->m_hWnd); }
|
设置视频格式前,首先启动"预览视频",然后再配置视频的格式。视频格式包括帧率、颜色空间、视频分辨率等,该功能的效果如图9-11所示。
|
| (点击查看大图)图9-11 视频格式配置属性页 |
双击"视频参数"按钮,添加事件处理代码。
void CCaptureVideoDlg::OnBnClickedImageParameter() { //TODO: 在此添加控件通知处理程序代码 m_cap.ConfigCameraFilter(this->m_hWnd); } |
设置视频图像参数前,首先启动"预览视频",然后配置图像参数。图像参数包括图像、白平衡、模式控制和去抖动等,该功能的效果如图9-12所示。并且该功能调整的参数马上起作用。
|
| (点击查看大图)图9-12 图像参数配置属性页 |
双击"保存图表"按钮,添加事件处理代码。
void CCaptureVideoDlg::OnBnClickedSavegraph() { //TODO: 在此添加控件通知处理程序代码 CFileDialog dlg(TRUE); if (dlg.DoModal()==IDOK) { CString str=dlg.GetPathName(); //要保存的Graph文件名 TCHAR *inFileName = str.GetBuffer(str.GetLength());//获取字符串指针 str.ReleaseBuffer(); //切记要释放Buffer m_cap.SaveGraph(inFileName); //保存Graph } } |
本功能存储的Graph文件可以使用程序GraphEdit播放。双击"退出程序"按钮,添加事件处理代码。程序隐含调用了类CCaptureClass的析构函数,释放资源和COM库。
void CCaptureVideoDlg::OnBnClickedExit() { //TODO: 在此添加控件通知处理程序代码 CDialog::OnOK(); } |
退出本程序时,由于视频捕获类CCaptureClass的析构函数已经包含了释放资源、指针的工作,所以退出应用程序时不用释放任何资源,只是关闭应用程序。
其他工作。
在对话框的初始化OnInitDialog中枚举本系统的视频采集设备,添加到列表框并默认显示第一个设备。
m_cap.EnumDevices(m_listCtrl.GetSafeHwnd()); m_listCtrl.SetCurSel (0); |
【责任编辑:
云霞 TEL:(010)68476606】