C#控制攝像頭實(shí)例談
使用VFW寫的C#控制攝像頭最大的問題就在于需要自己手動(dòng)另起一個(gè)線程。(這里,我們定義一個(gè)叫AviCapture.cs的類,用于引入avicap32.dll以及相關(guān)的內(nèi)容)在avicap32.dll中,CAPTUREPARMS結(jié)構(gòu)里有一個(gè)fYield的東東,代表的意思是另起線程標(biāo)志位,如果為真,則程序重新啟動(dòng)一個(gè)線程用于視頻流的捕獲,默認(rèn)值是假。但是如果你是為了真,你必須要在程序中處理一些潛在的操作,因?yàn)楫?dāng)視頻捕獲時(shí),其他操作并沒有被屏蔽。。在AviCapture這個(gè)類的基礎(chǔ)上定義一個(gè)叫Video的類,實(shí)現(xiàn)控制設(shè)想頭的一些方法,如打開攝像頭,關(guān)閉攝像頭,開始錄像,結(jié)束錄像,拍照片等等。。。。在Video類中還要定義兩個(gè)C#控制攝像頭函數(shù)如下:
- publicvoidget()
- {
- AviCapture.SendMessage(this.lwndC,AviCapture.WM_CAP_GET_SEQUENCE_SETUP,AviCapture.SizeOf(Capparms),refCapparms);
- }
- publicvoidset()
- {
- AviCapture.SendMessage(this.lwndC,AviCapture.WM_CAP_SET_SEQUENCE_SETUP,AviCapture.SizeOf(Capparms),refCapparms);
- }
用來獲得和設(shè)置相關(guān)的C#控制攝像頭參數(shù)
最后,在主窗體類中,做如下調(diào)用
- video.get();//
- video.Capparms.fYield=true;//另起一個(gè)線程
- video.Capparms.fAbortLeftMouse=false;//鼠標(biāo)左鍵單擊停止為false
- video.Capparms.fAbortRightMouse=false;//鼠標(biāo)右鍵單擊停止為false
- video.set();
在這里還有強(qiáng)調(diào)一下,上面的這段函數(shù)要用在視頻預(yù)覽函數(shù)之后(也就是打開攝像頭那個(gè)函數(shù)),否則是不起作用的。
【編輯推薦】