基于Aforge攝像頭調(diào)用簡(jiǎn)單實(shí)例
基于C#的Aforge類(lèi)調(diào)用簡(jiǎn)單示例,供大家參考,具體內(nèi)容如下
由題,本程序是使用Aforge類(lèi)庫(kù)調(diào)用攝像頭的demo。
功能:
1.預(yù)覽
2.前后攝像頭切換
1.判斷是否有攝像頭,無(wú)則提示
2.有,判斷攝像頭個(gè)數(shù),有1個(gè)則直接打開(kāi)預(yù)覽
3.有2個(gè)或以上,提示選擇后打開(kāi)相應(yīng)攝像頭預(yù)覽
3.拍照功能
控件:
1.攝像頭列表下拉框:用于選擇攝像頭,如無(wú)攝像頭則不能下拉
2.拍照按鈕:用于拍照,照片默認(rèn)存儲(chǔ)在當(dāng)前程序運(yùn)行目錄,名稱(chēng)為“Aforge.bmp”。如無(wú)攝像頭則不能點(diǎn)擊
3.預(yù)覽按鈕:用于打開(kāi)當(dāng)前選擇攝像頭預(yù)覽,如當(dāng)前選擇攝像頭不變,則不進(jìn)行重新預(yù)覽。如沒(méi)有攝像頭則不能點(diǎn)擊
4.提示標(biāo)簽:用于給出軟件的一些提示
5.預(yù)覽控件videoSourcePlayer:用于預(yù)覽拍照界面以及實(shí)現(xiàn)拍照功能
該控件需要右擊工具箱-選擇項(xiàng)-.NET選項(xiàng)卡中-瀏覽,找到Aforge.Controls.dll庫(kù)添加后才會(huì)出現(xiàn)
程序設(shè)計(jì)
1.加載窗體
查找所有攝像頭設(shè)備
2.預(yù)覽按鈕:
根據(jù)選中攝像頭打開(kāi)該攝像頭并預(yù)覽
3.拍照按鈕:
記錄當(dāng)前幀保存為圖像
代碼
程序主要代碼:
添加引用 using AForge.Video.DirectShow;
///查找所有攝像頭設(shè)備
private void loadCameraList()
{
VideoCaptureDevice cameraDevices =
new FilterInfoCollection(FilterCategory.VideoInputDevice);
if (cameraDevices.Count == 0)
{
capture_btn.Enabled = false;
cameraId_cob.Enabled = false;
preview_btn.Enabled = false;
guide_lab.Text = noCameraDevice;
cameraDevices = null;
}else if(cameraDevices.Count == 1)
{
isSingleCamera = true;
preview_btn.Enabled = false;
guide_lab.Visible = false;
}
foreach (FilterInfo cameraDevice in cameraDevices)
{
cameraId_cob.Items.Add(cameraDevice.Name);
cameraId_cob.SelectedIndex = 0;
}
}
///根據(jù)選中攝像頭打開(kāi)該攝像頭并預(yù)覽
private VideoCaptureDevice cameraDevice;
private void preview()
{
if (null != cameraDevice)
{//在2個(gè)或以上攝像頭進(jìn)行切換時(shí)執(zhí)行
preview_player.SignalToStop();
preview_player.WaitForStop();
}
cameraDevice =
new VideoCaptureDevice(cameraDevices[cameraId_cob.SelectedIndex].MonikerString);
cameraDevice.DesiredFrameSize = new Size(320, 240);
cameraDevice.DesiredFrameRate = 1;
preview_player.VideoSource = cameraDevice;
preview_player.Start();
}
///記錄當(dāng)前幀保存為圖像
private void takePhoto()
{
if (cameraDevice == null)
return;
Bitmap bitmap = preview_player.GetCurrentVideoFrame();
string fullPath = Application.StartupPath + "\\";
if (!Directory.Exists(fullPath))
Directory.CreateDirectory(fullPath);
string img = fullPath + "Aforge.jpg";
bitmap.Save(img);
guide_lab.Text = img;
guide_lab.Visible = true;
}
備注
1.關(guān)閉窗體時(shí)需要關(guān)閉控件:
private void aforgeForm_FormClosing(object sender, FormClosingEventArgs e)
{
preview_player.SignalToStop();
preview_player.WaitForStop();
}
2.調(diào)用preview_player.GetCurrentVideoFrame()方法提示沒(méi)有該方法
由于使用的Aforge.Controls.dll庫(kù)版本過(guò)低導(dǎo)致,根據(jù)官方記錄,該方法需要 (in AForge.Controls.dll) Version: 2.2.5.0 (2.2.5.0)版本支持
3.在添加預(yù)覽控件videoSourcePlayer時(shí)提示沒(méi)有可以加入的控件
目前筆者遇到的這個(gè)問(wèn)題比較奇葩,使用AForge.Controls.dll Version: 2.2.5.0 庫(kù)文件添加會(huì)報(bào)這個(gè)錯(cuò)誤,看過(guò)各種解法,比如直接把庫(kù)文件拖到工具面板上,還是沒(méi)能解決。說(shuō)奇葩是因?yàn)槟壳坝H測(cè)到的解決方法步驟是:
1).引用那邊先不要添加AForge.Controls.dll文件
2).找到AForge.Controls.dll Version: 2.0.0.0 注意版本號(hào)是低版本的。將這個(gè)低版本的加入工具面板就可以看到預(yù)覽控件videoSourcePlayer。
3).但是,此時(shí)代碼里會(huì)出現(xiàn)第二個(gè)錯(cuò)誤(調(diào)用preview_player.GetCurrentVideoFrame()方法提示沒(méi)有該方法)。原因就不解釋了,解決方法是:在引用里面的AForge.Controls.dll(這個(gè)時(shí)候可以看下屬性是Version: 2.0.0.0)刪除這個(gè)舊版本,添加新的版本的AForge.Controls.dll Version: 2.2.5.0。
至此,大功告成??梢哉>幾g了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解ObjectARX開(kāi)發(fā)環(huán)境的創(chuàng)建與開(kāi)發(fā)實(shí)例Hello World(VS2005+AutoCad2008+Object
這篇文章主要介紹了ObjectARX開(kāi)發(fā)環(huán)境的創(chuàng)建與開(kāi)發(fā)實(shí)例Hello World(VS2005+AutoCad2008+ObjectArx2008),本文通過(guò)圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
C#使用Consul集群進(jìn)行服務(wù)注冊(cè)與發(fā)現(xiàn)
這篇文章主要介紹了C#使用Consul集群進(jìn)行服務(wù)注冊(cè)與發(fā)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
C# winform中窗口關(guān)閉按鈕的隱藏與禁用詳解
這篇文章主要介紹了C# winform中窗口關(guān)閉按鈕的隱藏與禁用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12
C#使用Automation實(shí)現(xiàn)控制自動(dòng)撥打接聽(tīng)電話(huà)
這篇文章主要為大家詳細(xì)介紹了C#如何使用Automation實(shí)現(xiàn)控制自動(dòng)撥打接聽(tīng)電話(huà),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02
C#實(shí)現(xiàn)程序開(kāi)機(jī)啟動(dòng)的方法
這篇文章主要介紹了C#實(shí)現(xiàn)程序開(kāi)機(jī)啟動(dòng)的方法,涉及C#針對(duì)應(yīng)用程序及注冊(cè)表的相關(guān)操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06

