C#調(diào)用攝像頭實(shí)現(xiàn)拍照功能的示例代碼
前言
老師要求我們學(xué)生做一套拍照身份驗(yàn)證系統(tǒng),經(jīng)過(guò)長(zhǎng)時(shí)間的學(xué)習(xí),有了這篇文章,希望能幫到讀者們。
正文
首先介紹本文的主角:AForge
創(chuàng)建一個(gè)C#項(xiàng)目,引用必備的幾個(gè)DLL
- AForge.dll
- AForge.Controls.dll
- AForge.Imaging.dll
- AForge.Math.dll
- AForge.Video.DirectShow.dll
- AForge.Video.dll
這些DLL讀者們可以在文末下載我附帶的Demon
引用必要的命名空間
using AForge.Controls; using AForge.Video; using AForge.Video.DirectShow;
至此,便可以開(kāi)始編寫(xiě)代碼了。
首先遍歷操作系統(tǒng)上的攝像頭控件:
public static bool GetDevices() { try { //枚舉所有視頻輸入設(shè)備 videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice); if (videoDevices.Count != 0) { Console.WriteLine("已找到視頻設(shè)備."); return true; } return false; } catch (Exception ex) { Console.WriteLine("error:沒(méi)有找到視頻設(shè)備!具體原因:" + ex.Message); return false; } }
找到控件后就可以初始化攝像頭:
private static void CameraConn() { videoSource = new VideoCaptureDevice(videoDevices[selectedDeviceIndex].MonikerString); vid.VideoSource = videoSource; vid.Start(); }
但是這里為止,都只是攝像拍攝,如果需要拍照,則需要通過(guò)eventArgs.Frame.Clone()截取視頻中的某一幀圖像
這里就需要通過(guò)事件來(lái)處理:
public static void GrabBitmap() { if (videoSource == null) { return; } videoSource.NewFrame += new NewFrameEventHandler(videoSource_NewFrame); //新建事件 } static void videoSource_NewFrame(object sender, NewFrameEventArgs eventArgs) { Bitmap bmp = (Bitmap)eventArgs.Frame.Clone(); //Clone攝像頭中的一幀 bmp.Save(path, ImageFormat.Png); videoSource.NewFrame -= new NewFrameEventHandler(videoSource_NewFrame); //如果這里不寫(xiě)這個(gè),一會(huì)兒會(huì)不停的拍照, }
代碼中的path變量就是圖片保存的位置,讀者們可以自行設(shè)置路徑。我這里默認(rèn)是用戶桌面下的Temp.png文件
測(cè)試代碼下載地址:https://gitee.com/GiveCVE/csharp_camera/raw/master/OpenCamera.zip
到此這篇關(guān)于C#調(diào)用攝像頭實(shí)現(xiàn)拍照功能的示例代碼的文章就介紹到這了,更多相關(guān)C#調(diào)用攝像頭拍照內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C# Form自定義光標(biāo)的簡(jiǎn)單實(shí)現(xiàn)
這篇文章主要介紹了C# Form自定義光標(biāo)的簡(jiǎn)單實(shí)現(xiàn),有需要的朋友可以參考一下2014-01-01c# 怎樣簡(jiǎn)潔高效的實(shí)現(xiàn)多個(gè) Enum 自由轉(zhuǎn)換
這篇文章主要介紹了c# 怎樣簡(jiǎn)潔高效的實(shí)現(xiàn)多個(gè) Enum 自由轉(zhuǎn)換,幫助大家更好的進(jìn)行c# 開(kāi)發(fā),感興趣的朋友可以了解下2020-10-10C#基礎(chǔ)語(yǔ)法:結(jié)構(gòu)和類(lèi)區(qū)別詳解
這篇文章主要介紹了C#基礎(chǔ)語(yǔ)法:結(jié)構(gòu)和類(lèi)詳解,本文總結(jié)了一些結(jié)構(gòu)和類(lèi)的不同之處并給出了測(cè)試區(qū)別特性代碼,需要的朋友可以參考下2015-06-06C#不重復(fù)輸出一個(gè)數(shù)組中所有元素的方法
這篇文章主要介紹了C#不重復(fù)輸出一個(gè)數(shù)組中所有元素的方法,涉及C#針對(duì)數(shù)組的遍歷、校驗(yàn)及排序等操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08C#條件編譯、內(nèi)聯(lián)函數(shù)、CLS介紹
這篇文章介紹了C#的條件編譯、內(nèi)聯(lián)函數(shù)、CLS,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03C#實(shí)現(xiàn)讀取匿名對(duì)象屬性值的方法示例總結(jié)
這篇文章主要介紹了C#實(shí)現(xiàn)讀取匿名對(duì)象屬性值的方法,結(jié)合實(shí)例形式總結(jié)分析了C#通過(guò)反射、轉(zhuǎn)換等方法讀取匿名對(duì)象屬性值的相關(guān)操作技巧,需要的朋友可以參考下2020-03-03C#讀取數(shù)據(jù)庫(kù)返回泛型集合詳解(DataSetToList)
本篇文章主要是對(duì)C#讀取數(shù)據(jù)庫(kù)返回泛型集合(DataSetToList)進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-01-01