2013年1月28日 星期一

【AForge.NET】C#上使用AForge.Net擷取視訊畫面(Capture Image)


簡單4個步驟讓你在C#上使用視訊擷取畫面

Step1:
Download AForge.Net Framework

Step2:
Visual Studio 2008上做環境建置
1.建立一個 Windows Forms Application 的專案

2.Aforge.Net 安裝路徑設定
Solution Explorer => References(右鍵) => Add Reference => AForge.Net的Release資料夾

加入AForge.Video.DirectShow.dll、AForge.Video.dll(因為這一個範例只使用到這兩個dll檔)



Step3:
建立一個簡單的user interface視窗
1.Solution Explorer按Form1.cs,再去按 View Designer

2.視窗左邊的Toolbox選擇PictureBox,然後放置於Form1視窗區域之上

3.在PictureBox的Properties視窗選單中,屬性(Size)(設定640, 480)

4.Toolbox中點Button,然後放置於Form1視窗區域之上

5.在Button的Properties視窗選單中,可以自訂名稱,屬性(Text)(如:Start)

6.調整Form1視窗大小,以及Button、PictureBox的位置

Step4:
接下來開始寫一些關於視訊畫面擷取的程式碼
1.在Solution Explorer點選Form1.cs,按View Code,分別加入下面的程式碼

  •     using AForge.Video ;
  •     using AForge.Video.DirectShow ;
  •     public FilterInfoCollection USB_Webcams = null ;
  •     public VideoCaptureDevice Cam = null ;


2.在Form1.cs[Design]視窗中,點Form1 => Properties => Events(閃電圖形) => 屬性(Load),會自動產生Form1_Load事件函式

3.在Form1_Load的事件函式區域中加入以下程式碼
    USB_Webcams = new FilterInfoCollection(FilterCategory.VideoInputDevice) ;
    if (USB_Webcams.Count > 0)  // The quantity of WebCam must be more than 0.
    {
        button1.Enabled = true ;
        Cam = new VideoCaptureDevice(USB_Webcams[0].MonikerString) ;
        //Cam.NewFrame += new NewFrameEventHandler(Cam_NewFrame);
    }
    else
    {
        button1.Enabled = false ;
        MessageBox.Show("No video input device is connected.") ;
    }

4.在Form1.cs[Design]視窗中,點Form1 => Properties => Events => 屬性(FormClosed),自動產生的Form1_FormClosed事件函式

  在Form1_FormClosed的事件函式區域中加入以下程式碼
    if (Cam != null)
    {
        if (Cam.IsRunning)  // When Form1 closes itself, WebCam must stop, too.
        {
            Cam.Stop( ) ;   // WebCam stops capturing images.
        }
    }
5.在Form1.cs[Design]視窗中,點Button => Properties => Events => 屬性(Click),自動產生的button1_Click事件函式
  在button1_Click的事件函式區域中加入以下程式碼
    if (button1.Text == "Start")
    {
        button1.Text = "Stop" ;
        Cam.Start( ) ;   // WebCam starts capturing images.
    }
    else
    {
        button1.Text = "Start" ;
        Cam.Stop( ) ;  // WebCam stops capturing images.
    }
6.在Step3 "//Cam.NewFrame..." 下方,請輸入 "Cam.NewFrame +=",輸入"+="時會出現(Press TAB to insert),請按tab,
  緊接著出現(Press TAB to generate...),一樣按tab


  此時Cam_NewFrame的事件函式內,會將整行"throw new..."刪掉

  在Cam_NewFrame的事件函式內,輸入以下的程式取代原本那一行:
pictureBox1.Image = (Bitmap)eventArgs.Frame.Clone( );


到這裡就完工了,可以按執行跑看看了


參考來源:http://tw.myblog.yahoo.com/sl7333/article?mid=2643





1 則留言: