Google Code Prettify

2013年11月11日 星期一

C# webcam snapshot and save image to bitmap using aforge



在WINDOWS下做WEBCAM 影像的擷取,比較常見的就是用DirectShow或EmguCV,

最近突然發現有一個還不錯的open souce可以擷取webcam影像,而且大小不到50mb

它就是 aforge,這次就決定用它來示範怎麼做影像擷取與存圖!



編譯環境:

windows 7

visual studio 2012 express

aforge .net Framework-2.2.5


1.到  aforge 官網下載最新版.net Framework 並安裝


2.開啟新專案,選擇 Windows Form Application


3.把DLL加進Project

PROJECT  ->  Add Reference   ->   Browse

到 AForge.NET 的安裝目錄下,AForge.NET\Framework\Release,

將  AForge.Video.DirectShow.dll  和  AForge.Video.dll  加進來





















































4.UI介面設計

這邊我們只要簡單加入picture box 和 3個 button 就可以了,接著可以對物件按右鍵,

選擇 property,更改名稱,比較不容易在寫程式的時候搞混




































5.Code
//  Created by vince on 13/11/10.
//  Copyright (c) 2013年 vince. All rights reserved.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using AForge.Video;             //記得加入1
using AForge.Video.DirectShow;  //記得加入2

namespace aforge_webcam_tutorial
{
    public partial class Form1 : Form
    {
        public VideoCaptureDevice cam = null; //global
        public FilterInfoCollection usbCams;  //global
        Bitmap image_from_cam;                //global

        public Form1()
        {
            InitializeComponent();
        }

        void got_frame(object sender, NewFrameEventArgs eventArgs)
        {
            image_from_cam = (Bitmap)eventArgs.Frame.Clone();
            pictureBox1.Image = image_from_cam;
        }

        private void startButton_Click(object sender, EventArgs e)
        {
            usbCams = new FilterInfoCollection(FilterCategory.VideoInputDevice);
            cam = new VideoCaptureDevice(usbCams[0].MonikerString);
            cam.NewFrame += new NewFrameEventHandler(got_frame);//註冊事件(got_frame)
            cam.Start();
        }

        private void stopButton_Click(object sender, EventArgs e)
        {
            cam.Stop();  
        }

        private void saveButton_Click(object sender, EventArgs e)
        {
            SaveFileDialog sfd = new SaveFileDialog();
            if (sfd.ShowDialog(this) == DialogResult.Cancel) //按下取消鍵時返回
            {
               return;
            }
            image_from_cam.Save(sfd.FileName);//存圖,副檔名記得給他.bmp
        }
    }
}



執行下去就可以直接跑囉XD

下面是存圖片檔案





















下面這張是拍下來存起來的圖片






1 則留言:

  1. 請問大師知道c# 如何讀取 binary image file ? 必須依照指定 width and height= 640x480去讀取, 可否建議的code? 感謝

    回覆刪除