西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴(lài)的軟件下載站!
軟件
軟件
文章
搜索

首頁(yè)編程開(kāi)發(fā)C#.NET → C#操作攝像頭實(shí)現(xiàn)拍照監(jiān)控錄像功能

C#操作攝像頭實(shí)現(xiàn)拍照監(jiān)控錄像功能

前往專(zhuān)題相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:西西整理時(shí)間:2014/2/17 9:23:11字體大。A-A+

作者:西西點(diǎn)擊:2185次評(píng)論:0次標(biāo)簽: 攝像頭

  • 類(lèi)型:硬件驅(qū)動(dòng)大。186KB語(yǔ)言:中文 評(píng)分:2.7
  • 標(biāo)簽:
立即下載

從正式工作以來(lái)一直做的都是基于B/S的Web開(kāi)發(fā),已經(jīng)很長(zhǎng)時(shí)間不研究C/S的東西了,但是受朋友的委托,幫他做一下拍照的這么個(gè)小功能。其實(shí)類(lèi)似的代碼網(wǎng)上有很多,但是真的能夠拿來(lái)運(yùn)行的估計(jì)也沒(méi)幾個(gè)。本來(lái)是說(shuō)周末給做的,但是這兩天腦子一直很亂,也沒(méi)靜下來(lái),晚上了,再不做明天有點(diǎn)不好意思啊,只能臨時(shí)做一個(gè)了。在網(wǎng)上找資料自己做的過(guò)程中也發(fā)現(xiàn)了一些問(wèn)題,于是拿到博客上來(lái)分享一下,這樣一來(lái)有需要的朋友可以直接拿來(lái)用,二來(lái)正在研究的遇到這些問(wèn)題了可以迎刃而解。

剛開(kāi)始接觸攝像頭視頻之類(lèi)的是在大二的時(shí)候,那時(shí)候因?yàn)閷?shí)驗(yàn)室有一個(gè)小項(xiàng)目交到我手上,所以那時(shí)候?qū)Σシ乓曨l之類(lèi)的了解了一些。那時(shí)候的需求是對(duì)已經(jīng)錄下來(lái)的監(jiān)控錄像做處理,整個(gè)過(guò)程是已經(jīng)不需要自己再去控制錄像了,所以相對(duì)簡(jiǎn)單一點(diǎn)。而拍照和攝像是自己控制,所以稍微復(fù)雜那么一點(diǎn)點(diǎn)。行了,廢話(huà)說(shuō)到這里,下面進(jìn)入正題。

還是以往的作風(fēng),只實(shí)現(xiàn)功能,對(duì)界面不做過(guò)多的美化,有需要的朋友可以自己動(dòng)手。比較這年頭自己動(dòng)手,豐衣足食嘛。圖1-1是程序的主界面:


圖1-1

操作攝像頭以及實(shí)現(xiàn)拍照功能整個(gè)過(guò)程主要都是通過(guò)一個(gè)第三方的組件實(shí)現(xiàn)的,名字叫做 AForge ,是國(guó)外的組件,所以打開(kāi)起來(lái)有點(diǎn)慢,但是要有耐心啊,目前已經(jīng)更新到2.2.5版本了。如果不愿意從官網(wǎng)上下載,文章末尾處也給出了相應(yīng)的下載地址,需要的話(huà)直接拿來(lái)用就ok了。程序也很簡(jiǎn)單,一個(gè)WinForm頁(yè)面,添加一下對(duì)Aforge的引用就可以了,但是這個(gè)過(guò)程中會(huì)引用一些其他的dll,有些不是太常用,所以在這里對(duì)引用的dll也做了截圖(圖1-2),在自己做的過(guò)程中參照一下即可。


圖1-2

上圖1-1中間部分是用來(lái)實(shí)時(shí)顯示攝像頭開(kāi)啟后獲取到的內(nèi)容,是一個(gè)自定義控件。這里得說(shuō)明一下,將AForge.Controls.dll拖拽到左側(cè)的工具箱區(qū)域,然后就出來(lái)自定義控件了。這里順便說(shuō)明一下,我們平時(shí)自己開(kāi)發(fā)的自定義控件也可以通過(guò)這種方式來(lái)給別人用。前臺(tái)都準(zhǔn)備好了之后我們來(lái)開(kāi)始分析后臺(tái)代碼。

整個(gè)的思路是先找到電腦上的攝像頭設(shè)備,然后選擇我們需要操作的設(shè)備,然后在拍照或者攝像。今天由于時(shí)間關(guān)系僅僅只是實(shí)現(xiàn)拍照,下次再做攝像的功能,實(shí)現(xiàn)之后也會(huì)一樣分享在這里的,希望有需要的朋友關(guān)注。

當(dāng)Form加載的時(shí)候,我們監(jiān)聽(tīng)一下其Load事件,將檢測(cè)到的攝像頭設(shè)備添加到后邊的ComboBox中供用戶(hù)選擇,關(guān)鍵代碼如下:

Private void Form1_Load(object sender, EventArgs e)

{

try

{

    // 枚舉所有視頻輸入設(shè)備

    videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);

    if (videoDevices.Count == 0)

  throw new ApplicationException();


    foreach (FilterInfo device in videoDevices)

    {

  tscbxCameras.Items.Add(device.Name);

    }

    tscbxCameras.SelectedIndex = 0;

}

catch (ApplicationException)

{

    tscbxCameras.Items.Add("No local capture devices");

    videoDevices = null;

}

  }

當(dāng)用戶(hù)選擇某一攝像頭設(shè)備再點(diǎn)擊連接的時(shí)候,我們打開(kāi)攝像頭,并對(duì)其進(jìn)行初始化,關(guān)鍵代碼:

//連接攝像頭

  private void CameraConn()

  {

VideoCaptureDevice videoSource = new VideoCaptureDevice(videoDevices[tscbxCameras.SelectedIndex].MonikerString);

videoSource.DesiredFrameSize = new System.Drawing.Size(320, 240);

videoSource.DesiredFrameRate = 1;

videoSourcePlayer.VideoSource = videoSource;

videoSourcePlayer.Start();

  }

當(dāng)用戶(hù)關(guān)閉點(diǎn)擊關(guān)閉攝像頭的時(shí)候,我們做關(guān)閉的處理,代碼:

//關(guān)閉攝像頭

  private void btnClose_Click(object sender, EventArgs e)

  {

videoSourcePlayer.SignalToStop();

videoSourcePlayer.WaitForStop();

  }

當(dāng)用戶(hù)點(diǎn)擊拍照的時(shí)候,我們獲取攝像頭當(dāng)前的畫(huà)面,并保存到設(shè)定的路徑下,然后關(guān)閉當(dāng)前窗口。關(guān)鍵代碼:

 //拍照

  private void Photograph_Click(object sender, EventArgs e)

  {

try

{

    if (videoSourcePlayer.IsRunning)

    {

  BitmapSource bitmapSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(

videoSourcePlayer.GetCurrentVideoFrame().GetHbitmap(),

IntPtr.Zero,

 Int32Rect.Empty,

BitmapSizeOptions.FromEmptyOptions());

  PngBitmapEncoder pE = new PngBitmapEncoder();

  pE.Frames.Add(BitmapFrame.Create(bitmapSource));

  string picName = GetImagePath() + "\\" + "xiaosy" + ".jpg";

  if (File.Exists(picName))

  {

File.Delete(picName);

  }

  using (Stream stream = File.Create(picName))

  {

pE.Save(stream);

  }

  //拍照完成后關(guān)攝像頭并刷新同時(shí)關(guān)窗體

  if (videoSourcePlayer != null && videoSourcePlayer.IsRunning)

  {

videoSourcePlayer.SignalToStop();

videoSourcePlayer.WaitForStop();

  }

  this.Close();

    }

}

catch (Exception ex)

{

    MessageBox.Show("攝像頭異常:" + ex.Message);

}

  }


  private string GetImagePath()

  {

string personImgPath = Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory)

 + Path.DirectorySeparatorChar.ToString() + "PersonImg";

if (!Directory.Exists(personImgPath))

{

    Directory.CreateDirectory(personImgPath);

}


return personImgPath;

  }


關(guān)閉之后,在bin目錄下的PersonImg中即可找到保存的圖片,當(dāng)然,在程序中把該圖片展示出來(lái)效果會(huì)更好,但是由于時(shí)間關(guān)系,就不添加了。需要的朋友可以自己實(shí)現(xiàn),有問(wèn)題的歡迎一起交流。

至此,這樣一個(gè)簡(jiǎn)單的拍照功能就完成了,在這里,附上源碼下載地址。

    攝像頭驅(qū)動(dòng)
    (16)攝像頭驅(qū)動(dòng)
    西西軟件園提供好用的攝像頭驅(qū)動(dòng)大全下載,支持系統(tǒng),特別推薦的萬(wàn)能攝像頭驅(qū)動(dòng)適合絕大多數(shù)的攝像頭,但某些品牌攝像頭特有的功能無(wú)法使用.不過(guò)對(duì)于一些雜牌廠(chǎng)商出產(chǎn)的攝像頭也可以在本站按具體型號(hào)搜索,及時(shí)幫助你順利安裝。...更多>>
    萬(wàn)能顯卡
    (240)萬(wàn)能顯卡
    萬(wàn)能顯卡驅(qū)動(dòng)適用于所有顯卡安裝驅(qū)動(dòng)所用,稱(chēng)之為萬(wàn)能顯卡驅(qū)動(dòng)。顯卡驅(qū)動(dòng)是硬件所對(duì)應(yīng)的軟件,你裝電腦時(shí)那幫你裝電腦的人不是給了你很多碟子的嗎,那些就是驅(qū)動(dòng)程序,其中必然有一張是顯卡的驅(qū)動(dòng)程序。先要確定你的顯卡什么牌子型號(hào)的,如果記不得了,就打開(kāi)機(jī)箱看那個(gè)豎插在主板上的較大板子一般顯卡有很大的散熱片或風(fēng)扇上的型號(hào)品牌。如果是集成的顯卡在主板上看不到前面說(shuō)的那樣的電路板,就看主板上的型號(hào)品牌,記下來(lái)。但是...更多>>

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過(guò)難過(guò)
    • 5 囧
    • 3 圍觀(guān)圍觀(guān)
    • 2 無(wú)聊無(wú)聊

    熱門(mén)評(píng)論

    最新評(píng)論

    第 1 樓 本機(jī)地址CZ88.NET 網(wǎng)友 客人 發(fā)表于: 2015/8/24 10:36:18
    感謝,今天用到了

    支持( 0 ) 蓋樓(回復(fù))

    發(fā)表評(píng)論 查看所有評(píng)論(0)

    昵稱(chēng):
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)