前言:盼呀盼,實(shí)驗(yàn)室終于放暑假啦,雖然只有10天假,感覺還是很美滋滋噠。在家啥事兒沒干,吃飯睡覺玩手機(jī),渡過了兩三天,終于找回點(diǎn)干勁。上次更新貌似已經(jīng)是過年期間的事情了,當(dāng)時(shí)寫了幾篇但是沒有多少童鞋看,就有點(diǎn)松懈了,再次打開的時(shí)候很驚喜,漲粉兒啦,有贊有私信啦,嘎嘎嘎,感謝大家的支持與肯定~
這兩天我打算把上學(xué)期用C#做界面時(shí),感覺有所收獲的部分,整理出來,寫成前面一樣的入門文檔,希望能夠給閱讀我的文檔的童鞋帶來一點(diǎn)點(diǎn)幫助~
提綱:用c#實(shí)現(xiàn)一個(gè)拍照的功能程序,下面將給出實(shí)驗(yàn)效果和實(shí)現(xiàn)方法。

一、實(shí)驗(yàn)效果
1.運(yùn)行程序

程序首先將檢測(cè)本機(jī)的視頻設(shè)備,若有多個(gè)視頻設(shè)備,點(diǎn)擊紅色下拉框可以選擇切換;若本機(jī)沒有視頻設(shè)備,將在最下方的文本框給出異常提示信息。
2.連接攝像頭

點(diǎn)擊程序界面的“連接攝像頭”按鈕,按鈕上的文字將變成“關(guān)閉攝像頭”,同時(shí)視頻播放框?qū)⑦x定的攝像頭捕捉到的圖像內(nèi)容播放出來。
3.拍照

點(diǎn)擊“拍照”按鈕,將視頻框中當(dāng)前的圖像捕捉下來,保存為圖片,并在右邊的圖片框中顯示出來。
4.關(guān)閉攝像頭

點(diǎn)擊“關(guān)閉攝像頭”按鈕,按鈕上的文字會(huì)變成“連接攝像頭”,同時(shí)將攝像頭關(guān)閉,視頻播放框中不再右視頻顯現(xiàn)。
5.查看照片

拍攝的照片存放在程序的bin\debug文件夾下的image文件夾中,打開該文件夾即可查看。
二、實(shí)現(xiàn)步驟
本程序在《Step by step:一起來學(xué)C# (2)》給出的程序基礎(chǔ)上進(jìn)行編寫。下面將從使用的外部控件的下載、引用、程序功能實(shí)現(xiàn)幾個(gè)方面,介紹實(shí)現(xiàn)本功能程序的詳細(xì)步驟。
1.下載AForge庫
AForge目前更新到2.2.5版了,下載地址為:http://www.aforgenet.com/news/2013.07.17.releasing_framework_2.2.5.html。這個(gè)網(wǎng)頁打開有些慢,下載得到的庫文件之后將與程序一起給出。有想要自己下載的小伙伴可以按照下面的步驟嘗試一下~
(1)瀏覽器中打開下載鏈接

在下載網(wǎng)頁找到如紅色框中的“downloads”,點(diǎn)擊這個(gè)藍(lán)色的單次鏈接,跳轉(zhuǎn)到資源下載界面。
(2)選擇下載的文件

在下載界面,選擇要下載的文件,我們這邊選擇的是“Download Libraries only”,僅下載庫文件。
(3)查看下載得到的庫文件

解壓下載到的文件,在AForge.NET Framework-2.2.5-(libs only)\Release文件夾下可以看到之后要使用的庫文件。
2.添加對(duì)AForge的相關(guān)引用
我們主要需要引用:“AForge.dll”、“AForge.Controls.dll”、“AForge.Imaging.dll”、“AForge.Video.dll”、“AForge.Video.DirectShow.dll”五個(gè)庫文件。
本小節(jié)下面的內(nèi)容是添加對(duì)AForge部分使用到的庫的引用的詳細(xì)步驟,對(duì)這部分比較熟悉的小伙伴可以直接跳過,閱讀第3個(gè)步驟喲~
(1)進(jìn)入引用管理器

在VS右側(cè)解決方案處,找到“引用”標(biāo)簽,右擊“引用”,然后左鍵單擊“添加引用”,即可進(jìn)入引用管理器。
(2)在引用管理器選擇要引用的文件

在引用管理器中,點(diǎn)擊“瀏覽”按鈕,然后選擇要添加的庫文件。

此處以引用“AForge.dll”庫文件為例,說明引用過程。在“選擇要引用的文件”界面,進(jìn)入之前下載并解壓的AForge庫文件夾下的Release子文件夾,選中“AForge.dll”文件,點(diǎn)擊“添加”按鈕。

選擇好要引用的庫文件之后,在引用管理器界面便可以看到多了一行“AForge.dll”并打上了鉤,點(diǎn)擊“確定”即可完成引用添加。
(3)查看新增引用

添加引用之后,就可以在解決方案的引用標(biāo)簽下看到新增的庫文件啦~
(4)按照上面的方法完成引用的添加

本節(jié)開頭給出了5個(gè)要引用的庫文件,按照上面的方法,一一引用進(jìn)來,添加完引用之后,應(yīng)當(dāng)如圖6給出的圖片,至此添加引用的步驟完成啦。
(5)查看添加引用對(duì)工程帶來的變化

添加引用給工程帶來啥變化呢?我們添加完引用之后,點(diǎn)擊一下“啟動(dòng)”(不點(diǎn)擊“啟動(dòng)”編譯運(yùn)行一下,看不到變化哦~),然后我們?cè)龠M(jìn)入工程文件夾下的bin\dehug文件夾,會(huì)發(fā)現(xiàn)我們引用的庫文件全部被自動(dòng)添加到這個(gè)文件夾下了。
3.添加AForge中的視頻播放控件
本功能程序中,我們要使用到AForge給出的一個(gè)控件VideoSourcePlayer,這個(gè)控件在工具箱中,默認(rèn)是不包含的,需要我們自己添加進(jìn)工具箱,該控件位于剛剛引用的“AForge.Controls.dll”庫文件中。
下面將介紹如何在工具箱中添加一個(gè)控件,對(duì)于這部分比較熟悉的小伙伴可以跳過第3步驟下面的內(nèi)容啦~
(1)添加一個(gè)選項(xiàng)卡

添加一個(gè)選項(xiàng)卡,之后將新添加的控件就放到該選項(xiàng)卡下,找控件的時(shí)候方便一些。(這個(gè)步驟不是必須噠,只是讓工具箱里的控件emm清爽一些~)
(2)打開選擇工具箱項(xiàng)界面

接下來我們?cè)谛陆ǖ摹癆Forge”選項(xiàng)卡下面添加控件:右擊“AForge”選項(xiàng)卡->點(diǎn)擊“選擇項(xiàng)”。這時(shí)選擇工具箱項(xiàng)的界面會(huì)彈出,如下面的圖3.
(3)瀏覽添加.Net Framework組件

在“選擇工具箱項(xiàng)”界面,點(diǎn)擊“瀏覽”按鈕,打開寫有控件的庫文件。

選擇“AForge.Controls.dll”庫文件,點(diǎn)擊“打開”按鈕。

點(diǎn)擊“打開”按鈕之后,可能會(huì)彈出這個(gè)安全警告,點(diǎn)擊“是”就OK,親測(cè)無毒。。。。

然后我們看一下“選擇工具箱項(xiàng)”界面,.Net Framework組件中是否有VideoSourcePlayer(在比較下面的位置,需要拖動(dòng)一下右邊的emm滑動(dòng)條兒(忘了這玩意兒叫啥)),然后點(diǎn)擊“確定”按鈕。
(4)嘗試將添加的控件拖到界面

添加完控件,我們?cè)诠ぞ呦?>“AForge”標(biāo)簽下面就可以看到導(dǎo)入的控件了。我們嘗試一下,把“VideoSourcePlayer”控件拖到Form界面。(方法在之前的文章中提過,點(diǎn)住控件不放,一直拖到Form界面上即可)

拖完之后,我們便可以看到界面上多了一個(gè)其貌不揚(yáng)方框(紅色方框圈出來的),這就是我們之后要用的“VideoSourcePlayer”控件。
4.拖一個(gè)c#界面
下面我們先布置一下程序的前臺(tái)界面,就是簡(jiǎn)單的控件拖拽,然后設(shè)置一下控件的屬性,設(shè)置屬性的方法在《Step by step:一起來學(xué)C# (2)》和《Step by step:一起來學(xué)C# (4)》中有簡(jiǎn)要說明,需要的話可以參考一下哦~
(1)拖控件得到一個(gè)C#程序界面
拖出來的界面如圖1 拖界面所示,圖中給出了使用到的控件名稱,直接去工具箱里找一下拉過來就OK,界面布置大概一致就行,大小、位置不過多糾結(jié)。

(2)將來程序的后臺(tái)代碼注釋或刪除掉
因?yàn)槭鞘褂弥啊禨tep by step:一起來學(xué)C# (2)》中的程序,原先有一部分代碼,在本程序中就沒有用處了,可以注釋掉或刪掉。這邊是簡(jiǎn)單將原來的“點(diǎn)我吧”按鈕改成了“連接攝像頭”按鈕,雙擊界面上的“連接攝像頭”按鈕,將原來的程序刪掉或注釋掉,然后我們?cè)匍_始功能程序的編寫。

5.后臺(tái)代碼編寫
終于到了編寫代碼的步驟了,激動(dòng)~
(1)添加窗口變量聲明

進(jìn)入代碼編寫,在Form類里面添加變量聲明,這邊需要使用到一個(gè)視頻設(shè)備集合的變量,聲明方法如圖。
(2)添加Form_load代碼
我們要實(shí)現(xiàn)一個(gè)在窗體加載時(shí),檢測(cè)攝像頭設(shè)備,并且將設(shè)備名稱加入到下拉框comboBox的項(xiàng)中的功能,而窗體加載功能是在Form_load中完成的。

我們回到窗口界面,雙擊紅色方框圈出的區(qū)域的一個(gè)點(diǎn),c#會(huì)自動(dòng)生成Form1_Load函數(shù),我們?cè)谶@個(gè)函數(shù)中添加功能代碼即可,添加的代碼如下圖3。

注意:我們編寫程序時(shí)常常會(huì)遇到下面的錯(cuò)誤信息提示:“未能找到類型或命名空間名稱...”
解決的方法如下:右擊下面劃有紅色浪線的字段如圖4中的“FilterInfoCollection”;選擇解析;然后選擇using引用。這個(gè)操作實(shí)際上就是在程序文件開頭,添加了一行“using AForge.Video.DirectShow;”
如果右擊沒有解析選項(xiàng),說明相應(yīng)的庫文件沒有被添加到工程中,需要找到相應(yīng)的庫文件,使用第2步中的流程添加庫文件引用。


運(yùn)行測(cè)試:填寫好代碼時(shí)候,我們點(diǎn)擊“啟動(dòng)”,運(yùn)行測(cè)試一下。

運(yùn)行程序結(jié)果如下,選擇視頻設(shè)備后面的下拉框中,自動(dòng)顯現(xiàn)檢測(cè)到的我的筆記本電腦的攝像頭。

(3)實(shí)現(xiàn)攝像頭連接與斷開功能
退出運(yùn)行測(cè)試,下面我們編寫連接攝像頭部分的代碼,首先雙擊界面上的“連接攝像頭”,編寫該按鈕的響應(yīng)程序。

添加的程序如下圖:

我們點(diǎn)擊VS的“啟動(dòng)”按鈕,測(cè)試一下編寫好的程序。點(diǎn)擊界面上的“連接攝像頭”按鈕,按鈕上的字就變成了“關(guān)閉攝像頭”,同時(shí)“VideoSourcePlayer”控件中播放出攝像頭捕捉到的畫面。

點(diǎn)擊“圖11”中的“關(guān)閉攝像頭按鈕”,按鈕上的文字變成“連接攝像頭”,同時(shí)“VideoSourcePlayer”控件中不再顯示畫面,攝像頭停止工作。

(4)實(shí)現(xiàn)拍照功能
播放了攝像頭畫面我們已經(jīng)成功了一大步,下面要添加拍照功能,即點(diǎn)擊“拍照”按鈕,定格“VideoSourcePlayer”控件中的一幀畫面,在圖片框中顯示,同時(shí)生成圖片存到本地。
我們?cè)诠こ涛募耣in\debug文件夾下新建一個(gè)“image”文件夾,用于存儲(chǔ)拍攝的圖片。

然后雙擊界面上的“拍照按鈕”,進(jìn)入“拍照”按鈕響應(yīng)程序的編寫。

在函數(shù)中添加如下代碼:

至此,程序功能便實(shí)現(xiàn)了,下面是測(cè)試界面,點(diǎn)擊拍照,右邊的圖片框便定格一幀畫面。此時(shí)打開bin\debug\image文件夾,會(huì)發(fā)現(xiàn)下面有剛剛拍攝下來的照片。

工程文件將在下面評(píng)論中給出鏈接,供大家參考,省的沒調(diào)出來影響情緒哈~
文檔有不夠清楚和錯(cuò)誤的地方歡迎留言指出,一起進(jìn)步~