正文

家庭視頻監(jiān)控系統(tǒng)(15)

C#項目開發(fā)案例全程實錄(第2版) 作者:明日科技


當用鼠標拖動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 = "停止";

}

}


上一章目錄下一章

Copyright ? 讀書網 ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網安備 42010302001612號