當用鼠標拖動frmMain窗體時,調用公共類中的VCAUpdateOverlayWnd()和VCAUpdateVideoPreview()方法更新在Panel控件中顯示的視頻監(jiān)控畫面,使視頻監(jiān)控畫面隨之移動。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); //發(fā)送串口消息
serialPort.Close(); //關閉COM端口
}
說明:“聚焦-”、“對焦+”、“對焦-”、“光圈+”、“光圈-”、“雨刷+”和“雨刷-”按鈕的MouseDown事件的實現過程與“聚焦+”按鈕大致相同,只需調用PelcoD類中的相應方法,并傳遞不同的參數即可,這里不再詳細描述。
當按下“上”按鈕時,調用公共類PelcoD中的CameraTilt()方法將云臺向上轉動?!吧稀卑粹o的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()停止移動視頻畫面?!吧稀卑粹o的MouseUp事件的代碼如下:
例程22 代碼位置:光盤\TM\01\VWMS\VWMS\frmMain.cs
private void btnUp_MouseUp(object sender, MouseEventArgs e)
{
stopMove();
}
說明:“聚焦+”、“聚焦-”、“對焦+”、“對焦-”、“光圈+”、“光圈-”、“雨刷+”、“雨刷-”、“下”、“左”和“右”按鈕的MouseUp事件的實現過程與“上”按鈕大致相同,只需調用PelcoD類中的相應方法,并傳遞不同的參數即可,這里不再詳細描述。
在“自動監(jiān)控”區(qū)域,選擇要自動監(jiān)控的方向,單擊“開始”按鈕,開始自動監(jiān)控。自動監(jiān)控的實現原理是根據選擇的方向控制云臺的轉動方向,因此根據需要調用“上”、“下”、“左”和“右”按鈕的MouseUp事件中的代碼即可。
單擊“監(jiān)控管理”按鈕,實例化監(jiān)控管理窗體frmSetMonitor的一個對象,并調用其ShowDialog()方法顯示該窗體?!氨O(jiān)控管理”按鈕的Click事件的代碼如下:
例程23 代碼位置:光盤\TM\01\VWMS\VWMS\frmMain.cs
//打開監(jiān)控管理窗體
private void btnSetMonitor_Click(object sender, EventArgs e)
{
frmSetMonitor frmsetmonitor = new frmSetMonitor(); //實例化監(jiān)控管理窗體類對象
frmsetmonitor.ShowDialog(); //以對話框形式顯示監(jiān)控管理窗體
}
單擊“錄像”按鈕,設置要保存文件的格式及默認路徑,打開“保存視頻文件”對話框,然后調用公共類VideoOperate中的相應方法對要保存的內容進行處理后保存為視頻文件,同時設置“錄像”按鈕的Text值為“停止錄像”,這時再次單擊該按鈕,調用公共類VideoOperate中的VCAStop VideoCapture()方法停止錄像?!颁浵瘛卑粹o的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:該屬性用來獲得程序可執(zhí)行文件的路徑。
ShowDialog():該方法用來顯示“保存”對話框。
單擊“回放”按鈕,實例化視頻回放窗體frmPlay的一個對象,并調用其ShowDialog()方法顯示該窗體?!盎胤拧卑粹o的Click事件的代碼如下:
例程25 代碼位置:光盤\TM\01\VWMS\VWMS\frmMain.cs
//回放
private void btnPlay_Click(object sender, EventArgs e)
{
frmPlay frmpaly = new frmPlay(); //實例化視頻回放窗體類對象
frmpaly.ShowDialog(); //以對話框形式顯示視頻回放窗體
}
單擊“快照”按鈕,首先檢查BMP和JPG單選按鈕哪個處于選中狀態(tài),如果BMP單選按鈕處于選中狀態(tài),則調用公共類VideoOperate中的VCASaveAsBmpFile()方法將當前視頻監(jiān)控畫面保存為BMP文件;如果JPG單選按鈕處于選中狀態(tài),則調用公共類VideoOperate中的VCASaveAsJpegFile()方法將當前視頻監(jiān)控畫面保存為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()方法停止視頻監(jiān)控,同時設置該按鈕的Text值為“開始”,這時再次單擊該按鈕,調用自定義方法startMonitor()重新開始視頻監(jiān)控。“停止”按鈕的Click事件的代碼如下:
例程28 代碼位置:光盤\TM\01\VWMS\VWMS\frmMain.cs
//停止監(jiān)控
private void btnStop_Click(object sender, EventArgs e)
{
if (btnStop.Text == "停止")
{
VideoOperate.VCAUnInitSdk();
btnStop.Text = "開始";
}
else if (btnStop.Text == "開始")
{
startMonitor();
btnStop.Text = "停止";
}
}