当用鼠标拖动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 = "停止";
}
}