设为首页 加入收藏

TOP

1.5 主窗体设计(4)
2013-10-07 00:18:58 来源: 作者: 【 】 浏览:53
Tags:1.5 窗体 设计

1.5  主窗体设计(4)

(24)处理“快照”按钮的单击事件,截取当前预览图像,并根据选择的类型保存成相应的文件。代码如下:

void CCaptureDlg::OnSnapshot() 
{
if(CPreView::m_CurIndex != -1)        //判断是否有预览窗口
{
if(m_Frame.m_pList[CPreView::m_CurIndex].m_ShowImage)
{
CButton* pBmpButton = (CButton*)GetDlgItem(IDC_BMP);
if(pBmpButton->GetCheck() != 0)     //获取BMP单选按钮的状态
{
//创建文件保存对话框
CFileDialog fDlg(FALSE,"bmp","bmp_001",OFN_HIDEREADONLY
| OFN_OVERWRITEPROMPT,"bmp|*.bmp",this);
if(fDlg.DoModal() == IDOK)
{
CString fName = fDlg.GetPathName();            //获得文件的保存路径
VCASaveAsBmpFile(CPreView::m_CurIndex,fName);  //保存为BMP文件
}
}
else
{
//创建文件保存对话框
CFileDialog fDlg(FALSE,"jpg","jpg_001",OFN_HIDEREADONLY
| OFN_OVERWRITEPROMPT,"JPG|*.JPG",this);
if(fDlg.DoModal() == IDOK)
{
CString fName = fDlg.GetPathName();            //获得文件的保存路径
VCASaveAsJpegFile(CPreView::m_CurIndex,fName);  //保存为JPG文件
}  
}
}
else
{
MessageBox("当前选择的图像不能预览!","提示");
}
}
}
(25)处理“显卡类型”按钮的单击事件,设置显卡类型,并将设置结果保存到INI文件中。代码如下:
 void CCaptureDlg::OnSetting() 
{
CButton* pVGAButton = (CButton*)GetDlgItem(IDC_VGA);
int sel = pVGAButton->GetCheck();         //获得VGA单选按钮的状态
if(sel)
{
WritePrivateProfileString("显卡设置","类型","VGA","./syssetting.ini"); 
//将数据写入INI文件
}
else
{
WritePrivateProfileString("显卡设置","类型","PCI","./syssetting.ini"); 
//将数据写入INI文件

MessageBox("要使显卡设置生效,需要重新启动应用程序!","提示");
}
(26)处理对话框的WM_WINDOWPOSCHANGED消息,当对话框位置改变时,更新视频预览窗口的位置。代码如下:
void CCaptureDlg::OnWindowPosChanged(WINDOWPOS FAR* lpwndpos) 
{
CDialog::OnWindowPosChanged(lpwndpos);
for (UINT i = 0 ; i< m_DevNum; i++)        //根据芯片数进行循环
{
if (m_Frame.m_pList[i].m_ShowImage)      //判断是否显示图片

if (m_Frame.m_pList[i].m_Stop==psStop)
{
VCAStopVideoPreview(i);                     //停止预览
VCAUpdateOverlayWnd(m_Frame.GetSafeHwnd());  //更新视频预览窗口
}
else if (m_Frame.m_pList[i].m_Stop==psPreview)
{  
m_Frame.m_pList[i].Invalidate();     //刷新窗口
//更新视频预览窗口
VCAUpdateOverlayWnd(m_Frame.m_hWnd);
VCAUpdateVideoPreview(i,m_Frame.m_pList[i].m_hWnd);
}
}
}
}
(27)处理“录像”按钮的单击事件,代码如下:
 void CCaptureDlg::OnKinescope() 
{
if(!m_Kinescope)           //判断是否录像
{
if(CPreView::m_CurIndex != -1)
{
//创建文件保存对话框
CFileDialog fDlg(FALSE,"avi","avi_001",OFN_HIDEREADONLY
| OFN_OVERWRITEPROMPT,"AVI|*.avi",this);
if (fDlg.DoModal()==IDOK)
{
m_Kinescope = TRUE;
CString file = fDlg.GetPathName();    //获得文件保存路径
//设置MPEG压缩的关键帧间隔,必须大于等于帧率
VCASetKeyFrmInterval(CPreView::m_CurIndex,250);
//设置MPEG压缩的位率,范围为56Kbps ~ 10Mbps
VCASetBitRate(CPreView::m_CurIndex,256);
//设置视频捕获帧率,bFrameRateReduction参数为保留参数
//PAL显示帧率始终为25,NTSC显示帧率始终为30
//PAL捕获帧率最大为25,NTSC捕获帧率最大为30
VCASetVidCapFrameRate(CPreView::m_CurIndex,25);
//设置视频捕获尺寸
VCASetVidCapSize(CPreView::m_CurIndex,320,240);
//设置MPEG4_XVID压缩的质量
VCASetXVIDQuality(CPreView::m_CurIndex,10,3);
//设置MPEG4_XVID压缩模式
VCASetXVIDCompressMode(CPreView::m_CurIndex,XVID_VBR_MODE);
BOOL ret = VCAStartVideoCapture(CPreView::m_CurIndex,
CAP_ORIGIN_MPEG4_STREAM,
MPEG4_AVIFILE_CALLBACK ,file);   //开始视频捕获
GetDlgItem(IDC_KINESCOPE)->SetWindowText("停止录像");
}
}
}
else
{
m_Kinescope = FALSE;
GetDlgItem(IDC_KINESCOPE)->SetWindowText("录像");
VCAStopVideoCapture(CPreView::m_CurIndex);    //停止视频捕获
}
}
说明:经过上面的操作已经可以完成基本的监控功能,但是,为了使监控更灵活,还要使用另一个硬件设备——云台。云台用于调整摄像头的位置。通常,摄像头安装在云台之上,通过云台的转动实现摄像头水平、垂直方向的改变,从而实现对监控位置的调整。云台除了能够对摄像头进行转动外,还可以控制摄像头的焦聚、光圈和变倍等,这样可以调整摄像头的捕捉范围和清晰度。
【责任编辑:夏书 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇1.5 主窗体设计(3) 下一篇1.5 主窗体设计(5)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: