版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、在一些銀行、大型商場、辦公樓、升降電梯中,為了保障公有財產(chǎn)、商品、辦公設(shè)備、資料、人身等的安全,都設(shè)有監(jiān)控系統(tǒng)。在出現(xiàn)問題時,用戶可以通過監(jiān)控系統(tǒng)查找原因。下面的幾個實例分別實現(xiàn)了攝像頭監(jiān)控與定時監(jiān)控的功能。利用普通的簡易攝像頭,通過C#語言即可開發(fā)成簡易視頻程序。本實例利用市場上購買的普通攝像頭,利用VFW技術(shù),實現(xiàn)單路視頻監(jiān)控系統(tǒng)。運行程序,窗體中將顯示艦體攝像頭米集的視頻信息。如圖13.9所示。技術(shù)要點本實例主要使用了VFW(VideoforWindows)技術(shù)。VFW是Microsoft公司為開發(fā)Windows平臺下的視頻應(yīng)用程序提供的軟件工具包,提供了一系列應(yīng)用程序編程接口(API)
2、,用戶可以通過這些接口很方便地實現(xiàn)視頻捕獲、視頻編輯及視頻播放等通用功能,還可利用回調(diào)函數(shù)開發(fā)比較復雜的視頻應(yīng)用程序。該技術(shù)的特點是播放視頻時不需要專用的硬件設(shè)備,而且應(yīng)用靈活,可以滿足視頻應(yīng)用程序開發(fā)的需要。Windows操作系統(tǒng)自身就攜帶了VFW技術(shù),系統(tǒng)安裝時,會自動安裝VFW的相關(guān)組件。VFW技術(shù)主要由六個功能模塊組成,下面進行簡單說明。lAVICAP32.DLL:包含執(zhí)行視頻捕獲的函數(shù),給AVI文件的I/O處理和視頻,音頻設(shè)備驅(qū)動程序提供一個高級接口。lMSVIDEO.DLL:包含一套特殊的DrawDib函數(shù),用來處理程序上的視頻操作。lMCIAVI.DRV:包括對VFW的MCI命令
3、解釋器的驅(qū)動程序。lAVIFILE.DLL:包含由標準多媒體I/O(mmio)函數(shù)提供的更高級的命令,用來訪問.AVI文件。lICM:壓縮管理器,用于管理的視頻壓縮/解壓縮的編譯碼器。lACM:音頻壓縮管理器,提供與ICM相似的服務(wù),適用于波形音頻。其中13.4節(jié)所有的實例主要使用AVICAP32.DLL中的函數(shù)和USER32.DLL中的函數(shù),函數(shù)語法及結(jié)構(gòu)如下。capCreateCaptureWindow函數(shù)該函數(shù)用于創(chuàng)建一個視頻捕捉窗口。語法如下:DllImportCavicap32.dll)publicstaticexternIntPtrcapCreateCaptureWindowA(b
4、ytelpszWindowName,intdwStyle,intx,inty,intnWidth,intnHeight,IntPtrhWndParent,intnID);參數(shù)說明如下。llpszWindowName:標識窗口的名稱。ldwStyle:標識窗口風格。lx、y:標識窗口的左上角坐標。lnWidth、nHeight:標識窗口的寬度和高度。lhWnd:標識父窗口句柄。lnID:標識窗口ID。l返回值:視頻捕捉窗口句柄。(2)SendMessage函數(shù)用于向Windows系統(tǒng)發(fā)送消息機制。DllImport(User32.dll)privatestaticexternboolSendMe
5、ssage(IntPtrhWnd,intwMsg,intwParam,intlParam);參數(shù)說明如下。lhWnd:窗口句柄。lwMsg:將要發(fā)送的消息。lwParam、lParam:消息的參數(shù),每個消息都有兩個參數(shù),參數(shù)設(shè)置由發(fā)送的消息而定。L實現(xiàn)過程(1)新建一個項目,命名為Exl3_08,默認窗體為Forml,添加1個類文件(.CS),用于編寫視頻類。(2)在Form1窗體中,主要添加1個PictrueBox控件,用于顯示視頻;添加4個Button控件,用于打開視頻、關(guān)閉視頻、拍攝照片和退出程序。(3)主要程序代碼。視頻類中主要實現(xiàn)打開視頻、關(guān)閉視頻以及通過視頻拍攝照片的功能。代碼如下
6、:publicclassVideoAPI/視頻API類/視頻API調(diào)用DllImportCavicap32.dll)publicstaticexternIntPtrcapCreateCaptureWindowA(bytelpszWindowName,intdwStyle,intx,inty,intnWidth,intnHeight,IntPtrhWndParent,intnID);DllImportCavicap32.dll)publicstaticexternboolcapGetDriverDescriptionA(shortwDriver,bytelpszName,intcbName,by
7、telpszVer,intcbVer);DllImport(User32.dll)publicstaticexternboolSendMessage(IntPtrhWnd,intwMsg,boolwParam,intlParam);DllImport(User32.dll)publicstaticexternboolSendMessage(IntPtrhWnd,intwMsg,shortwParam,intlParam);/常量publicconstintWM_USER=0 x400;publicconstintWS_CHILD=0 x40000000;publicconstintWS_VIS
8、IBLE=0 x10000000;publicconstintSWP_N0M0VE=0 x2;publicconstintSWP_N0Z0RDER=0 x4;publicconstintWM_CAP_DRIVER_CONNECT=WM_USER+10;publicconstintWM_CAP_DRIVER_DISCONNECT=WM_USER+11;publicconstintWM_CAP_SET_CALLBACK_FRAME=WM_USER+5;publicconstintWM_CAP_SET_PREVIEW=WM_USER+50;publicconstintWM_CAP_SET_PREVI
9、EWRATE=WM_USER+52;publicconstintWM_CAP_SET_VIDEOFORMAT=WM_USER+45;publicconstintWM_CAP_START=WM_USER;publicconstintWM_CAP_SAVEDIB=WM_CAP_START+25;/視頻類publicclasscVideoprivateIntPtrlwndC;/保存無符號句柄privateIntPtrmControlPtr;/保存管理指示器privateintmWidth;privateintmHeight;publiccVideo(IntPtrhandle,intwidth,int
10、height)mControlPtr=handle;/顯示視頻控件的句柄mWidth=width;/視頻寬度mHeight=height;/視頻高度/打開視頻設(shè)備/publicvoidStartWebCam()bytelpszName=newbyte100;bytelpszVer=newbyte100;VideoAPI.capGetDriverDescriptionA(0,lpszName,100,lpszVer,100);this.lwndC=VideoAPI.capCreateCaptureWindowA(lpszName,VideoAPI.WS_CHILD|VideoAPI.WS_VIS
11、IBLE,0,0,mWidth,mHeight,mControlPtr,0);if(VideoAPI.SendMessage(lwndC,VideoAPI.WM_CAP_DRIVER_CONNECT,0,0)VideoAPI.SendMessage(lwndC,VideoAPI.WM_CAP_SET_PREVIEWRATE,100,0);VideoAPI.SendMessage(lwndC,VideoAPI.WM_CAP_SET_PREVIEW,true,0);/關(guān)閉視頻設(shè)備/publicvoidCloseWebcam()VideoAPI.SendMessage(lwndC,VideoAPI.
12、WM_CAP_DRIVER_DISCONNECT,0,0);/拍照/paramname=path要保存bmp文件的路徑/parampublicvoidGrabImage(IntPtrhWndC,stringpath)IntPtrhBmp=Marshal.StringToHGlobalAnsi(path);VideoAPI.SendMessage(lwndC,VideoAPI.WM_CAP_SAVEDIB,0,hBmp.ToInt32();Forml窗體中通過調(diào)用視頻類中的方法來實現(xiàn)相應(yīng)的功能。在【打開視頻】按鈕的Click事件中添加如下代碼:privatevoidbuttonl_Click(o
13、bjectsender,EventArgse)btnPlay.Enabled=false;btnStop.Enabled=true;btnPz.Enabled=true;video=newcVideo(pictureBoxl.Handle,pictureBoxl.Width,pictureBoxl.Height);video.StartWebCam();在【關(guān)閉視頻】按鈕的Click事件中添加如下代碼:privatevoidb_stop_Click(objectsender,EventArgse)btnPlay.Enabled=true;btnStop.Enabled=false;btnPz.
14、Enabled=false;video.CloseWebcam();在【拍攝照片】按鈕的Click事件下添加如下代碼:privatevoidbtnPz_Click(objectsender,EventArgse)video.GrabImage(pictureBoxl.Handle,d:a.bmp);舉一反三根據(jù)本實例,讀者可以開發(fā)以下程序。無人值班視頻實時監(jiān)控系統(tǒng)。車庫安全實時監(jiān)控系統(tǒng)。實例426攝像頭監(jiān)控錄像實例說明Hnjo本例是為通過攝像頭來實現(xiàn)監(jiān)控錄像的程序。運行本例后,單擊【開始監(jiān)控】按鈕,程序?qū)⒆詣娱_始錄像,錄像文件(lx.avi)將保存在D盤根目錄下。運行程序,效果如圖13.10所
15、示。L技術(shù)要點在實例“簡易視頻程序”的技術(shù)要點中,使用的技術(shù)和相關(guān)函數(shù)已經(jīng)介紹過。在這里主要介紹如何將捕獲的視頻制作成.AVI媒體文件。實現(xiàn)技術(shù)為主要通過SendMessage函數(shù)發(fā)送Windows消息機制,消息值WM_CAP_FILE_SET_CAPTURE_FILEA和WM_CAP_SEQUENCE,分別用來設(shè)置視頻捕捉的文件名稱和初始化視頻流,捕捉視頻信息到文件:privateconstintWM_USER=0 x400;privateconstintWM_CAP_START=WM_USER;privateconstintWM_CAP_SEQUENCE=WM_CAP_START+62;p
16、rivateconstintWM_CAP_FILE_SET_CAPTURE_FILEA=WM_CAP_START+20;實現(xiàn)關(guān)鍵代碼如下:IntPtrhBmp=Marshal.StringToHGlobalAnsi(path);SendMessage(hWndC,WM_CAP_FILE_SET_CAPTURE_FILEA,0,hBmp.ToInt32();SendMessage(hWndC,WM_CAP_SEQUENCE,0,0);L實現(xiàn)過程新建一個項目,命名為Ex13_09,默認窗體為Form1,添加一個類文件(.CS),用于編寫視頻類。在Form1窗體中,主要添加一個PictrueBox控
17、件,用于顯示視頻;添加4個Button控件,用于開始監(jiān)控、停止監(jiān)控和監(jiān)控程序。視頻類中主要程序代碼如下:/summary/開始錄像/summary/paramname=path要保存錄像的路徑/parampublicvoidStarKinescope(stringpath)IntPtrhBmp=Marshal.StringToHGlobalAnsi(path);SendMessage(hWndC,WM_CAP_FILE_SET_CAPTURE_FILEA,0,hBmp.ToInt32();SendMessage(hWndC,WM_CAP_SEQUENCE,0,0);/summary/停止錄像/
18、publicvoidStopKinescope()SendMessage(hWndC,WM_CAP_STOP,0,0);Form1窗體中主要程序代碼如下:/開始錄像privatevoidbutton1_Click(objectsender,EventArgse)btnStar.Enabled=false;btnStop.Enabled=true;video.StarKinescope(d:lx.avi);/停止錄像privatevoidbutton2_Click(objectsender,EventArgse)btnStar.Enabled=true;btnStop.Enabled=false
19、;video.StopKinescope();舉一反三根據(jù)本實例,讀者可以開發(fā)以下程序。小區(qū)視頻監(jiān)控錄像系統(tǒng)。公司財務(wù)室視頻監(jiān)控系統(tǒng)。實例427起市攝像頭定時監(jiān)握采鋌_實例427超市攝像頭定時監(jiān)控系統(tǒng)L實例說明本實例實現(xiàn)超市攝像頭定時監(jiān)控系統(tǒng)。運行本例后,在“定時監(jiān)控設(shè)置”處設(shè)置監(jiān)控的星期及時間,單擊【保存】按鈕,將“定時設(shè)置”參數(shù)數(shù)據(jù)保存到數(shù)據(jù)庫中。系統(tǒng)在運行到定時時間后,程序?qū)⒆詣舆M行監(jiān)控。如圖13.11所示。另外,監(jiān)控的錄像文件和圖片文件保存在D盤根目錄中,命名格式為系統(tǒng)當前日期。圖13.11超市攝像頭定時監(jiān)控I一技術(shù)要點相關(guān)技術(shù)要點請參見實例“攝像頭監(jiān)控錄像”。另外,本實例利用Time
20、r控件中的定時執(zhí)行功能,進行數(shù)據(jù)的定時錄像工作。L實現(xiàn)過程(1)新建一個項目,命名為Exl3_10,默認窗體為Forml,添加一個類文件(.CS),用于編寫視頻類。在Form1窗體中,主要添加一個PictrueBox控件,用于顯示視頻;其他控件的添加如圖13.11所示。主要程序代碼。privatevoidtimer1_Tick(objectsender,EventArgse)stringstrTime=;/星期一if(chk1.Checked&Convert.ToInt32(DateTime.Now.DayOfWeek)=1)strTime=DateTime.Now.ToString(HH:m
21、m);DateTimedate=Convert.ToDateTime(mtxt1.Text);if(strTime=date.ToString(HH:mm)video.StarKinescope(d:+DateTime.Today.Month.ToString()+DateTime.Today.Day.ToString()+DateTime.Now.Hour.ToString()+DateTime.Now.Minute.ToString()+DateTime.Now.Second.ToString()+.avi);/星期二if(chk1.Checked&Convert.ToInt32(Date
22、Time.Now.DayOfWeek)=2)strTime=DateTime.Now.ToString(HH:mm);DateTimedate=Convert.ToDateTime(mtxt2.Text);if(strTime=date.ToString(HH:mm)video.StarKinescope(d:+DateTime.Today.Month.ToString()+DateTime.Today.Day.ToString()+DateTime.Now.Hour.ToString()+DateTime.Now.Minute.ToString()+DateTime.Now.Second.T
23、oString()+.avi);/星期三if(chk1.Checked&Convert.ToInt32(DateTime.Now.DayOfWeek)=3)strTime=DateTime.Now.ToString(HH:mm);DateTimedate=Convert.ToDateTime(mtxt3.Text);if(strTime=date.ToString(HH:mm)video.StarKinescope(d:+DateTime.Today.Month.ToString()+DateTime.Today.Day.ToString()+DateTime.Now.Hour.ToStrin
24、g()+DateTime.Now.Minute.ToString()+DateTime.Now.Second.ToString()+.avi);/星期四if(chk1.Checked&Convert.ToInt32(DateTime.Now.DayOfWeek)=4)strTime=DateTime.Now.ToString(HH:mm);DateTimedate=Convert.ToDateTime(mtxt4.Text);if(strTime=date.ToString(HH:mm)video.StarKinescope(d:+DateTime.Today.Month.ToStringO+
25、DateTime.Today.Day.ToStringO+DateTime.Now.Hour.ToStringO+DateTime.Now.Minute.ToString()+DateTime.Now.Second.ToStringO+.avi);/星期五if(chkl.Checked&Convert.ToInt32(DateTime.Now.Day0fWeek)=5)strTime=DateTime.Now.ToString(HH:mm);DateTimedate=Convert.ToDateTime(mtxt5.Text);if(strTime=date.ToString(HH:mm)video.StarKinescope(d:+DateTime.Today.Month.ToStringO+DateTime.Today.Day.ToString
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工作心得體會總結(jié)
- 2025年度典當物品鑒定與拍賣代理服務(wù)合同3篇
- 二零二五年度軍事通信保密協(xié)議及網(wǎng)絡(luò)維護合同3篇
- 二零二五年度幼兒早期教育托管班入園協(xié)議書3篇
- 二零二五年度養(yǎng)殖場租賃與農(nóng)業(yè)生態(tài)循環(huán)經(jīng)濟發(fā)展合作合同3篇
- 2025年度新型建筑材料內(nèi)部承包協(xié)議書3篇
- 2025年度農(nóng)村保潔員崗位職責及待遇合同
- 2025年度水產(chǎn)養(yǎng)殖廢棄物處理設(shè)施建設(shè)合作協(xié)議合同3篇
- 2025年度教育培訓機構(gòu)掛靠合作協(xié)議書標準模板3篇
- 二零二五年度農(nóng)業(yè)現(xiàn)代化土地承包合作框架協(xié)議3篇
- 不動產(chǎn)登記申請表
- 2024年中國中鐵十局招聘高頻難、易錯點500題模擬試題附帶答案詳解
- 項目資金管理統(tǒng)籌實施方案
- 國家開放大學電大《金融市場》教學考一體化網(wǎng)考形考試題及答案-圖文
- 2024年P(guān)URL系列反應(yīng)型皮革用聚氨酯乳液項目合作計劃書
- GB/T 44328-2024七氟異丁腈
- 湖南省常德市桃源縣市級名校2024年中考數(shù)學模試卷含解析
- 山里的夜(2022年浙江金華中考語文試卷記敘文閱讀題及答案)
- 安全保衛(wèi)工作方案和滅火,應(yīng)急疏散預案
- DBJ15 31-2016建筑地基基礎(chǔ)設(shè)計規(guī)范(廣東省標準)
- 基于PLC的食品包裝機控制系統(tǒng)設(shè)計
評論
0/150
提交評論