家庭视频监控系统(15)

当用鼠标拖动frmMain窗体时,调用公共类中的VCAUpdateOverlayWnd()和VCAUpdateVideoPreview()方法更新在Panel控件中显示的视频监控画面,使视频监控画面随之移动。frmMain窗体的Move事件的代码如下:

例程19 代码位置:光盘\TM\01\VWMS\VWMS\frmMain.cs

//移动窗体位置时,视频随之移动

private void frmMain_Move(object sender, EventArgs e)

{

for (int i = 0; i < m_dwDevNum; i++)

{

plVideo1.Invalidate(); //初始化Panel控件

VideoOperate.VCAUpdateOverlayWnd(this.Handle); //指定多路显示小窗口的大窗口

VideoOperate.VCAUpdateVideoPreview(i, plVideo1.Handle); //更新视频预览

}

}

当按下“聚焦+”按钮时,调用公共类PelcoD中的CameraFocus()方法实现增加聚焦功能。“聚焦+”按钮的MouseDown事件的代码如下:

例程20 代码位置:光盘\TM\01\VWMS\VWMS\frmMain.cs

//增加聚焦

private void btnAHighlghts_MouseDown(object sender, MouseEventArgs e)

{

messagesend = pelcod.CameraFocus(addressin, PelcoD.Focus.Near);

serialPort.Open(); //打开指定的COM端口

serialPort.Write(messagesend, 0, 7); //发送串口消息

serialPort.Close(); //关闭COM端口

}

说明:“聚焦-”、“对焦+”、“对焦-”、“光圈+”、“光圈-”、“雨刷+”和“雨刷-”按钮的MouseDown事件的实现过程与“聚焦+”按钮大致相同,只需调用PelcoD类中的相应方法,并传递不同的参数即可,这里不再详细描述。

当按下“上”按钮时,调用公共类PelcoD中的CameraTilt()方法将云台向上转动。“上”按钮的MouseDown事件的代码如下:

例程21 代码位置:光盘\TM\01\VWMS\VWMS\frmMain.cs

//方向控制——上

private void btnUp_MouseDown(object sender, MouseEventArgs e)

{

messagesend = pelcod.CameraTilt(addressin, PelcoD.Tilt.Up, speedin);

serialPort.Open();

serialPort.Write(messagesend, 0, 7);

serialPort.Close();

}

说明:“下”、“左”和“右”按钮的MouseDown事件的实现过程与“上”按钮大致相同,只需调用PelcoD类中的相应方法,并传递不同的参数即可,这里不再详细描述。

当从“上”按钮上释放鼠标时,调用自定义方法stopMove()停止移动视频画面。“上”按钮的MouseUp事件的代码如下:

例程22 代码位置:光盘\TM\01\VWMS\VWMS\frmMain.cs

private void btnUp_MouseUp(object sender, MouseEventArgs e)

{

stopMove();

}

说明:“聚焦+”、“聚焦-”、“对焦+”、“对焦-”、“光圈+”、“光圈-”、“雨刷+”、“雨刷-”、“下”、“左”和“右”按钮的MouseUp事件的实现过程与“上”按钮大致相同,只需调用PelcoD类中的相应方法,并传递不同的参数即可,这里不再详细描述。

在“自动监控”区域,选择要自动监控的方向,单击“开始”按钮,开始自动监控。自动监控的实现原理是根据选择的方向控制云台的转动方向,因此根据需要调用“上”、“下”、“左”和“右”按钮的MouseUp事件中的代码即可。

单击“监控管理”按钮,实例化监控管理窗体frmSetMonitor的一个对象,并调用其ShowDialog()方法显示该窗体。“监控管理”按钮的Click事件的代码如下:

例程23 代码位置:光盘\TM\01\VWMS\VWMS\frmMain.cs

//打开监控管理窗体

private void btnSetMonitor_Click(object sender, EventArgs e)

{

frmSetMonitor frmsetmonitor = new frmSetMonitor();   //实例化监控管理窗体类对象

frmsetmonitor.ShowDialog(); //以对话框形式显示监控管理窗体

}

单击“录像”按钮,设置要保存文件的格式及默认路径,打开“保存视频文件”对话框,然后调用公共类VideoOperate中的相应方法对要保存的内容进行处理后保存为视频文件,同时设置“录像”按钮的Text值为“停止录像”,这时再次单击该按钮,调用公共类VideoOperate中的VCAStop VideoCapture()方法停止录像。“录像”按钮的Click事件的代码如下:

例程24 代码位置:光盘\TM\01\VWMS\VWMS\frmMain.cs

//录像

private void btnVideo_Click(object sender, EventArgs e)

{

if (btnVideo.Text == "录像")

{

sfDialog.Filter = "*.avi|*.avi"; //指定存储的文件格式

sfDialog.Title = "保存视频文件"; //指定对话框标题

sfDialog.InitialDirectory = Application.StartupPath.Substring(0,Application.StartupPath.LastIndexOf("\\")). Substring (0, Application.StartupPath.Substring(0, Application.StartupPath.LastIndexOf("\\")).LastIndexOf("\\")) + "\\Video\\";

if (sfDialog.ShowDialog() == DialogResult.OK)

{

btnVideo.Text = "停止录像";

VideoOperate.VCASetKeyFrmInterval(0, 250);

VideoOperate.VCASetBitRate(0, 256);

VideoOperate.VCASetVidCapFrameRate(0, 25, false);

VideoOperate.VCASetVidCapSize(0, 320, 240);

VideoOperate.VCASetXVIDQuality(0, 10, 3);

VideoOperate.VCASetXVIDCompressMode(0, VideoOperate.COMPRESSMODE.XVID_VBR_MODE);

VideoOperate.VCAStartVideoCapture(0, VideoOperate.CAPMODEL.CAP_MPEG4_STREAM, Video Operate.MP4MODEL.MPEG4_AVIFILE_CALLBACK, sfDialog.FileName);

}

}

else if (btnVideo.Text == "停止录像")

{

btnVideo.Text = "录像";

VideoOperate.VCAStopVideoCapture(0);

}

}

代码贴士

StartupPath:该属性用来获得程序可执行文件的路径。

ShowDialog():该方法用来显示“保存”对话框。

单击“回放”按钮,实例化视频回放窗体frmPlay的一个对象,并调用其ShowDialog()方法显示该窗体。“回放”按钮的Click事件的代码如下:

例程25 代码位置:光盘\TM\01\VWMS\VWMS\frmMain.cs

//回放

private void btnPlay_Click(object sender, EventArgs e)

{

frmPlay frmpaly = new frmPlay(); //实例化视频回放窗体类对象

frmpaly.ShowDialog(); //以对话框形式显示视频回放窗体

}

单击“快照”按钮,首先检查BMP和JPG单选按钮哪个处于选中状态,如果BMP单选按钮处于选中状态,则调用公共类VideoOperate中的VCASaveAsBmpFile()方法将当前视频监控画面保存为BMP文件;如果JPG单选按钮处于选中状态,则调用公共类VideoOperate中的VCASaveAsJpegFile()方法将当前视频监控画面保存为JPG文件。“快照”按钮的Click事件的代码如下:

例程26 代码位置:光盘\TM\01\VWMS\VWMS\frmMain.cs

//快照

private void btnSnapShots_Click(object sender, EventArgs e)

{

if (rbtnBMP.Checked)

{

VideoOperate.VCASaveAsBmpFile(0, Application.StartupPath.Substring(0, Application.StartupPath. LastIndex Of ("\\")).Substring(0, Application.StartupPath.Substring(0, Application.StartupPath.LastIndexOf("\\")).LastIndexOf ("\\")) + "\\Photo\\" + DateTime.Now.ToFileTime() + ".bmp");

}

else

{

VideoOperate.VCASaveAsJpegFile(0, Application.StartupPath.Substring(0, Application.StartupPath. LastIndexOf("\\")). Substring(0, Application.StartupPath.Substring(0, Application.StartupPath.LastIndex Of("\\")). LastIndexOf("\\")) + "\\Photo\\" + DateTime.Now.ToFileTime() + ".jpg", 100);

}

}

单击“注册”按钮,实例化软件注册窗体frmRegister的一个对象,并调用其ShowDialog()方法显示该窗体,同时调用Hide()方法隐藏当前窗体。“注册”按钮的Click事件的代码如下:

例程27 代码位置:光盘\TM\01\VWMS\VWMS\frmMain.cs

//打开软件注册窗体

private void btnReg_Click(object sender, EventArgs e)

{

frmRegister frmregister = new frmRegister(); //实例化软件注册窗体对象

frmregister.Show(); //显示软件注册窗体

this.Hide();  //隐藏当前窗体

}

单击“停止”按钮,调用公共类VideoOperate中的VCAUnInitSdk()方法停止视频监控,同时设置该按钮的Text值为“开始”,这时再次单击该按钮,调用自定义方法startMonitor()重新开始视频监控。“停止”按钮的Click事件的代码如下:

例程28 代码位置:光盘\TM\01\VWMS\VWMS\frmMain.cs

//停止监控

private void btnStop_Click(object sender, EventArgs e)

{

if (btnStop.Text == "停止")

{

VideoOperate.VCAUnInitSdk();

btnStop.Text = "开始";

}

else if (btnStop.Text == "开始")

{

startMonitor();

btnStop.Text = "停止";

}

}

读书导航