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