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

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

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

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

作者:西西點擊:2185次評論:0次標簽: 攝像頭

  • 類型:硬件驅(qū)動大。186KB語言:中文 評分:2.7
  • 標簽:
立即下載

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

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

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


圖1-1

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


圖1-2

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

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

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

Private void Form1_Load(object sender, EventArgs e)

{

try

{

    // 枚舉所有視頻輸入設備

    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;

}

  }

當用戶選擇某一攝像頭設備再點擊連接的時候,我們打開攝像頭,并對其進行初始化,關鍵代碼:

//連接攝像頭

  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();

  }

當用戶關閉點擊關閉攝像頭的時候,我們做關閉的處理,代碼:

//關閉攝像頭

  private void btnClose_Click(object sender, EventArgs e)

  {

videoSourcePlayer.SignalToStop();

videoSourcePlayer.WaitForStop();

  }

當用戶點擊拍照的時候,我們獲取攝像頭當前的畫面,并保存到設定的路徑下,然后關閉當前窗口。關鍵代碼:

 //拍照

  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);

  }

  //拍照完成后關攝像頭并刷新同時關窗體

  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;

  }


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

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

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

    相關評論

    閱讀本文后您有什么感想? 已有人給出評價!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

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

    支持( 0 ) 蓋樓(回復)

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

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