日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
      軟件
      軟件
      文章
      搜索

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

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

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

      作者:西西點擊:2185次評論:0次標(biāo)簽: 攝像頭

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

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

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

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


      圖1-1

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


      圖1-2

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

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

      當(dāng)Form加載的時候,我們監(jiān)聽一下其Load事件,將檢測到的攝像頭設(shè)備添加到后邊的ComboBox中供用戶選擇,關(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)用戶選擇某一攝像頭設(shè)備再點擊連接的時候,我們打開攝像頭,并對其進(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)用戶關(guān)閉點擊關(guān)閉攝像頭的時候,我們做關(guān)閉的處理,代碼:

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

        private void btnClose_Click(object sender, EventArgs e)

        {

      videoSourcePlayer.SignalToStop();

      videoSourcePlayer.WaitForStop();

        }

      當(dāng)用戶點擊拍照的時候,我們獲取攝像頭當(dāng)前的畫面,并保存到設(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)攝像頭并刷新同時關(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)然,在程序中把該圖片展示出來效果會更好,但是由于時間關(guān)系,就不添加了。需要的朋友可以自己實現(xiàn),有問題的歡迎一起交流。

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

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

        相關(guān)評論

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

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

        熱門評論

        最新評論

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

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

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

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