




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、在一些銀行、大型商場、辦公樓、升降電梯中,為了保障公有財產(chǎn)、商品、辦公設(shè)備、資料、人身等的安全,都設(shè)有監(jiān)控系統(tǒng)。在出現(xiàn)問題時,用戶可以通過監(jiān)控系統(tǒng)查找原因。下面的幾個實例分別實現(xiàn)了攝像頭監(jiān)控與定時監(jiān)控的功能。實例425簡易視頻程序?qū)嵗f明利用普通的簡易攝像頭,通過C#語言即可開發(fā)成簡易視頻程序。本實例利用市場上購買的普通攝像頭,利用VFW技術(shù),實現(xiàn)單路視頻監(jiān)控系統(tǒng)。運行程序,窗體中將顯示艦體攝像頭采集的視頻信息。如圖13.9所示。技術(shù)要點本實例主要使用了VFW(Video for Windows)技術(shù)。VFW 是Microsoft公司為開發(fā)Windows平臺下的視頻應(yīng)用程序提供的軟件工具包,提
2、供了一系列應(yīng)用程序編程接口(API),用戶可以通過這些接口很 方便地實現(xiàn)視頻捕獲、視頻編輯及視頻播放等通用功能,還可利用回調(diào)函數(shù)開發(fā)比較復(fù)雜的視頻應(yīng)用程序。該技術(shù)的特點是播放視頻時不需要專用的硬件設(shè)備,而且 應(yīng)用靈活,可以滿足視頻應(yīng)用程序開發(fā)的需要。Windows操作系統(tǒng)自身就攜帶了VFW技術(shù),系統(tǒng)安裝時,會自動安裝VFW的相關(guān)組件。VFW技術(shù)主要由六個功能模塊組成,下面進(jìn)行簡單說明。l AVICAP32.DLL:包含執(zhí)行視頻捕獲的函數(shù),給AVI文件的I/O處理和視頻,音頻設(shè)備驅(qū)動程序提供一個高級接口。l MSVIDE
3、O.DLL:包含一套特殊的DrawDib函數(shù),用來處理程序上的視頻操作。l MCIAVI.DRV:包括對VFW的MCI命令解釋器的驅(qū)動程序。l AVIFILE.DLL:包含由標(biāo)準(zhǔn)多媒體I/O(mmio)函數(shù)提供的更高級的命令,用來訪問.AVI文件。l ICM:壓縮管理器,用于管理的視頻壓縮/解壓縮的編譯碼器。l ACM:音頻壓縮管理器,提供與ICM相似的服務(wù),適用于波形音頻。其中13.4節(jié)所有的實例主要使用AVICAP32.DLL中的函數(shù)和US
4、ER32.DLL中的函數(shù),函數(shù)語法及結(jié)構(gòu)如下。(1)capCreateCaptureWindow函數(shù)該函數(shù)用于創(chuàng)建一個視頻捕捉窗口。語法如下: DllImport("avicap32.dll") public static extern IntPtr capCreateCaptureWindowA(byte lpszWindowName, int dwStyle, int x, int y, int nWid
5、th, int nHeight, IntPtr hWndParent, int nID);參數(shù)說明如下。l lpszWindowName:標(biāo)識窗口的名稱。l dwStyle:標(biāo)識窗口風(fēng)格。l x、y:標(biāo)識窗口的左上角坐標(biāo)。l nWidth、nHeight:標(biāo)識窗口的寬度和高度。l hWnd:標(biāo)識父窗口句柄。l nID:標(biāo)識窗口ID。l
6、; 返回值:視頻捕捉窗口句柄。(2)SendMessage函數(shù)用于向Windows系統(tǒng)發(fā)送消息機(jī)制。DllImport("User32.dll")private static extern bool SendMessage(IntPtr hWnd, int wMsg, int wParam, int lParam);參數(shù)說明如下。l hWnd:窗口句柄。l wMsg:將要發(fā)送的消息。l wParam、lParam:消息的參數(shù),每個消息都有兩個參數(shù),參數(shù)設(shè)置由發(fā)送
7、的消息而定。實現(xiàn)過程(1)新建一個項目,命名為Ex13_08,默認(rèn)窗體為Form1,添加1個類文件(.CS),用于編寫視頻類。(2)在Form1窗體中,主要添加1個PictrueBox控件,用于顯示視頻;添加4個Button控件,用于打開視頻、關(guān)閉視頻、拍攝照片和退出程序。(3)主要程序代碼。視頻類中主要實現(xiàn)打開視頻、關(guān)閉視頻以及通過視頻拍攝照片的功能。代碼如下: public class VideoAPI /視頻API類 /
8、 視頻調(diào)用 DllImport("avicap32.dll") public static extern IntPtr capCreateCaptureWindowA(byte lpszWindowName, int dwStyle, int x, int y, int nWidth, int nHeight, IntPtr hWndParent, int nID);
9、60; DllImport("avicap32.dll") public static extern bool capGetDriverDescriptionA(short wDriver, byte lpszName, int cbName, byte lpszVer, int cbVer); DllImport("User32.dll")
10、 public static extern bool SendMessage(IntPtr hWnd, int wMsg, bool wParam, int lParam); DllImport("User32.dll") public static extern bool SendMessage(IntPtr hWnd, i
11、nt wMsg, short wParam, int lParam); / 常量 public const int WM_USER = 0x400; public const int WS_CHILD = 0x40000000; public cons
12、t int WS_VISIBLE = 0x10000000; public const int SWP_NOMOVE = 0x2; public const int SWP_NOZORDER = 0x4; public const int WM_CAP_DRIVER_CONNECT = WM_USER + 10;
13、; public const int WM_CAP_DRIVER_DISCONNECT = WM_USER + 11; public const int WM_CAP_SET_CALLBACK_FRAME = WM_USER + 5; public const int WM_CAP_SET_PREVIEW = WM_USER + 50;
14、; public const int WM_CAP_SET_PREVIEWRATE = WM_USER + 52; public const int WM_CAP_SET_VIDEOFORMAT = WM_USER + 45; public const int WM_CAP_START = WM_USER; p
15、ublic const int WM_CAP_SAVEDIB = WM_CAP_START + 25; public class cVideo /視頻類 private IntPtr lwndC; /保存無符號句柄
16、; private IntPtr mControlPtr; /保存管理指示器 private int mWidth; private int mHeight; public cVideo(IntPtr handle, int width, int height) &
17、#160; mControlPtr = handle; /顯示視頻控件的句柄 mWidth = width; /視頻寬度 mHeight =
18、height; /視頻高度 / <summary> / 打開視頻設(shè)備 / </summary> public void
19、 StartWebCam() byte lpszName = new byte100; byte lpszVer = new byte100;
20、 VideoAPI.capGetDriverDescriptionA(0, lpszName, 100, lpszVer, 100); this.lwndC = VideoAPI.capCreateCaptureWindowA(lpszName, VideoAPI.WS_CHILD | VideoAPI.WS_VISIBLE, 0, 0, mWidth, mHeight, mControlPtr, 0);
21、 if (VideoAPI.SendMessage(lwndC, VideoAPI.WM_CAP_DRIVER_CONNECT, 0, 0) VideoAPI.SendMessage(lwn
22、dC, VideoAPI.WM_CAP_SET_PREVIEWRATE, 100, 0); VideoAPI.SendMessage(lwndC, VideoAPI.WM_CAP_SET_PREVIEW, true, 0); &
23、#160; / <summary> / 關(guān)閉視頻設(shè)備 / </summary> public void CloseWebcam()
24、; VideoAPI.SendMessage(lwndC, VideoAPI.WM_CAP_DRIVER_DISCONNECT, 0, 0); / <summary>
25、; / 拍照 / </summary> / <param name="path">要保存bmp文件的路徑</param> public void
26、 GrabImage(IntPtr hWndC, string path) IntPtr hBmp = Marshal.StringToHGlobalAnsi(path); VideoAPI.SendMessage(lwndC, VideoAPI.W
27、M_CAP_SAVEDIB, 0, hBmp.ToInt32(); Form1窗體中通過調(diào)用視頻類中的方法來實現(xiàn)相應(yīng)的功能。在【打開視頻】按鈕的Click事件中添加如下代碼: private void button1_Click(object sender, EventArgs e)
28、; btnPlay.Enabled = false; btnStop.Enabled = true; btnPz.Enabled = true;
29、 video = new cVideo(pictureBox1.Handle, pictureBox1.Width, pictureBox1.Height); video.StartWebCam(); 在【關(guān)閉視頻】按鈕的Click事件中添加如下代碼:
30、; private void b_stop_Click(object sender, EventArgs e) btnPlay.Enabled = true; btnStop.Enabled = false;
31、0; btnPz.Enabled = false; video.CloseWebcam(); 在【拍攝照片】按鈕的Click事件下添加如下代碼: private void btnPz_Click(obje
32、ct sender, EventArgs e) video.GrabImage(pictureBox1.Handle, "d:a.bmp"); 舉一反三根據(jù)本實例,讀者可以開發(fā)以下程序。 無人值班視頻實時監(jiān)控系統(tǒng)。 車庫安全實時監(jiān)控系統(tǒng)。實例426攝像頭
33、監(jiān)控錄像實例說明本例是為通過攝像頭來實現(xiàn)監(jiān)控錄像的程序。運行本例后,單擊【開始監(jiān)控】按鈕,程序?qū)⒆詣娱_始錄像,錄像文件(lx.avi)將保存在D盤根目錄下。運行程序,效果如圖13.10所示。技術(shù)要點在實例“簡易視頻程序”的技術(shù)要點中,使用的技術(shù)和相關(guān)函數(shù)已經(jīng)介紹過。在這里主要介 紹如何將捕獲的視頻制作成 .AVI媒體文件。實現(xiàn)技術(shù)為主要通過SendMessage函數(shù)發(fā)送Windows消息機(jī)制,消息值 WM_CAP_FILE_SET_CAPTURE_FILEA和WM_CAP_SEQUENCE,分別用來設(shè)置視頻捕捉的文件名稱和初始化視頻流,捕捉視 頻信息到文件: &
34、#160; private const int WM_USER = 0x400; private const int WM_CAP_START = WM_USER; private const int WM_CAP_SEQUENCE = WM_CAP_START + 62; private cons
35、t int WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20;實現(xiàn)關(guān)鍵代碼如下: IntPtr hBmp = Marshal.StringToHGlobalAnsi(path); SendMessage(hWndC,WM_CAP_FILE_SET_CAPTURE_FILEA,0, hB
36、mp.ToInt32(); SendMessage(hWndC, WM_CAP_SEQUENCE, 0, 0);實現(xiàn)過程(1)新建一個項目,命名為Ex13_09,默認(rèn)窗體為Form1,添加一個類文件(.CS),用于編寫視頻類。(2)在Form1窗體中,主要添加一個PictrueBox控件,用于顯示視頻;添加4個Button控件,用于開始監(jiān)控、停止監(jiān)控和監(jiān)控程序。(3)視頻類中主要程序代碼如下:
37、 / <summary> / 開始錄像 / </summary> / <param name="path">
38、要保存錄像的路徑</param> public void StarKinescope(string path) IntPtr hBmp = Marshal.StringToHGlobalAnsi(path);
39、160; SendMessage(hWndC,WM_CAP_FILE_SET_CAPTURE_FILEA,0, hBmp.ToInt32(); SendMessage(hWndC, WM_CAP_SEQUENCE, 0, 0);
40、; / <summary> / 停止錄像 / </summary> public void StopKinescope()
41、0; SendMessage(hWndC, WM_CAP_STOP, 0, 0); (4)Form1窗體中主要程序代碼如下:/開始錄像 private void button1_Click(object sender, EventArgs e)
42、60; btnStar.Enabled = false; btnStop.Enabled = true; video.StarKinescope("d:lx.avi"); /停止錄像 &
43、#160; private void button2_Click(object sender, EventArgs e) btnStar.Enabled = true; btnStop.En
44、abled = false; video.StopKinescope(); 舉一反三根據(jù)本實例,讀者可以開發(fā)以下程序。 小區(qū)視頻監(jiān)控錄像系統(tǒng)。 公司財務(wù)室視頻監(jiān)控系統(tǒng)。實例427超市攝像頭定時監(jiān)控系統(tǒng)實例說明本實例實現(xiàn)超市攝像頭定時監(jiān)控系統(tǒng)。運行本例后,在“定時監(jiān)控設(shè)置”處設(shè)置監(jiān)控的星期 及時間,單擊【保存】按鈕,將“定時設(shè)置”參數(shù)數(shù)據(jù)保存到數(shù)據(jù)庫中。系統(tǒng)在
45、運行到定時時間后,程序?qū)⒆詣舆M(jìn)行監(jiān)控。如圖13.11所示。另外,監(jiān)控的錄像 文件和圖片文件保存在D盤根目錄中,命名格式為系統(tǒng)當(dāng)前日期。圖13.11 超市攝像頭定時監(jiān)控技術(shù)要點相關(guān)技術(shù)要點請參見實例“攝像頭監(jiān)控錄像”。另外,本實例利用Timer控件中的定時執(zhí)行功能,進(jìn)行數(shù)據(jù)的定時錄像工作。實現(xiàn)過程(1)新建一個項目,命名為Ex13_10,默認(rèn)窗體為Form1,添加一個類文件(.CS),用于編寫視頻類。(2)在Form1窗體中,主要添加一個PictrueBox控件,用于顯示視頻;其他控件的添加如圖13.11所示。(3)主要程序代碼。
46、60; private void timer1_Tick(object sender, EventArgs e) string strTime="" /星期一
47、 if (chk1.Checked && Convert.ToInt32(DateTime.Now.DayOfWeek)=1) strTime = DateTime.Now.ToStri
48、ng("HH:mm"); DateTime date = Convert.ToDateTime(mtxt1.Text); if (strTime = date.ToString("HH:mm")
49、60; video.StarKinescope("d:" + DateTime.Today.Month.ToString() + DateTime.Today.Day.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.T
50、oString() + ".avi"); /星期二 if (chk1.Checked && Convert.ToInt32(DateTime.Now.DayOfWee
51、k) = 2) strTime = DateTime.Now.ToString("HH:mm");
52、 DateTime date = Convert.ToDateTime(mtxt2.Text); if (strTime = date.ToString("HH:mm") &
53、#160; video.StarKinescope("d:" + DateTime.Today.Month.ToString() + DateTime.Today.Day.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString() + ".avi");
54、60; /星期三 if (chk1.Checked && Convert.ToInt32(DateTime.Now.DayOfWeek) = 3)
55、160; strTime = DateTime.Now.ToString("HH:mm"); DateTime date = Convert.ToDateTime(mtxt3.Text);
56、0; if (strTime = date.ToString("HH:mm") video.StarKinescope("d:" + DateTime.Today.Month.ToString() + DateTime.Today.Day.ToString()
57、 + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString() + ".avi"); /星期四
58、160; if (chk1.Checked && Convert.ToInt32(DateTime.Now.DayOfWeek) = 4) strTime = DateTime.Now.ToString("HH:mm&quo
59、t;); DateTime date = Convert.ToDateTime(mtxt4.Text); if (strTime = date.ToString("HH:mm")
60、60; video.StarKinescope("d:" + DateTime.Today.Month.ToString() + DateTime.Today.Day.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString() + "
61、.avi"); /星期五 if (chk1.Checked && Convert.ToInt32(DateTime.Now.DayOfWeek) = 5)
62、; strTime = DateTime.Now.ToString("HH:mm"); DateTime da
63、te = Convert.ToDateTime(mtxt5.Text); if (strTime = date.ToString("HH:mm") video.StarKi
64、nescope("d:" + DateTime.Today.Month.ToString() + DateTime.Today.Day.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString() + ".avi"); /星期六
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 游客體驗優(yōu)化實踐分析
- 英語外研版二年級上冊知識點
- 企業(yè)培訓(xùn)與課件應(yīng)用
- 安全責(zé)任明確廠房租賃協(xié)議書
- 城市改造配套采石場產(chǎn)權(quán)移交合同
- 財務(wù)顧問公司財務(wù)托管與專業(yè)服務(wù)協(xié)議
- 互聯(lián)網(wǎng)教育平臺策劃與開發(fā)合同
- 企業(yè)全面預(yù)算管理財務(wù)制度合同范本
- 集團(tuán)廣告投放方案模板
- 餐飲加盟店預(yù)付款項及掛賬合作合同范本
- 國家開放大學(xué)2023年7月期末統(tǒng)一試《11376機(jī)械制造裝備及設(shè)計》試題及答案-開放本科
- 礦山救護(hù)培訓(xùn)課件
- 2023年《中藥商品學(xué)》期末考試復(fù)習(xí)題庫(含答案)
- 質(zhì)量管理體系品質(zhì)保證體系圖
- 山東省各地市地圖課件
- 啦啦操訓(xùn)練計劃
- 中醫(yī)內(nèi)科常見病癥及方藥
- DB41T2437-2023養(yǎng)老機(jī)構(gòu)院內(nèi)感染預(yù)防與控制規(guī)范
- 設(shè)備交接班管理制度
- 浙江省級高新技術(shù)企業(yè)研發(fā)中心申請材料樣例
- 酒泉事業(yè)單位筆試真題
評論
0/150
提交評論