程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# 調用AForge類庫操作攝像頭

C# 調用AForge類庫操作攝像頭

編輯:C#入門知識

C# 調用AForge類庫操作攝像頭


如有雷同,不勝榮幸,若轉載,請注明

最近做項目需要操作攝像頭,在網上百度了很多資料,很多都是C#調用window API 發送SendMessage,實現操作攝像頭,但是C#調用window API的時候因為驅動的問題,總是彈出視頻選擇對話框,讓人很是無語,看到大牛們有的截獲到了window消息,然後模擬點擊確定按鈕,這是在是不敢恭維啊,還有的大牛根據API原型重寫了,至於我是一只IT小小鳥了,然後在繼續百度,找到了一個AForge強大的C#類庫,最後終於搞定了,接下來將我拙劣的代碼部分貼出來,以便同行或者需要的朋友學習交流,

首先用到AForge類庫下載地址:http://www.aforgenet.com/

然後引用AForge,AForge.Controls(這個是控件,可以添加到工具箱中),AForge.Imaging,AForge.Video,AForge.Video.DirectShow;

然後直接上代碼

private FilterInfoCollection videoDevices;
        private VideoCaptureDevice videoSource;
        public int selectedDeviceIndex = 0;


下面是獲取設備

public FilterInfoCollection GetDevices()
        {
            try
            {
                //枚舉所有視頻輸入設備
                videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
                if (videoDevices.Count != 0)
                {
                    LogClass.WriteFile("已找到視頻設備.");
                    return videoDevices;
                }
                else
                    return null;
            }
            catch (Exception ex)
            {
                LogClass.WriteFile("error:沒有找到視頻設備!具體原因:" + ex.Message);
                return null;
            }
        }


選擇設備,然後連接攝像頭

 ///

        /// 連接視頻攝像頭         ///         ///         ///         ///         public VideoCaptureDevice VideoConnect(int deviceIndex = 0, int resolutionIndex = 0)         {             if (videoDevices.Count <= 0)                 return null;             selectedDeviceIndex = deviceIndex;             videoSource = new VideoCaptureDevice(videoDevices[deviceIndex].MonikerString);

            return videoSource;         }

//抓圖,拍照,單幀

public void GrabBitmap(string path)
        {
            if (videoSource == null)
                return;
            g_Path = path;
            videoSource.NewFrame += new NewFrameEventHandler(videoSource_NewFrame);
        }


void videoSource_NewFrame(object sender, AForge.Video.NewFrameEventArgs eventArgs)
        {
            Bitmap bmp = (Bitmap)eventArgs.Frame.Clone();
            string fullPath = path + "temp\\";
            if (!Directory.Exists(fullPath))
                Directory.CreateDirectory(fullPath);
            string img = fullPath + DateTime.Now.ToString("yyyyMMdd hhmmss") + ".bmp";
            bmp.Save(img);
//如果這裡不寫這個,一會兒會不停的拍照,
            videoSource.NewFrame -= new NewFrameEventHandler(videoSource_NewFrame);
        }


這樣就完成了操作攝像頭的工作

但是發現一個問題,如果要拍照得到的照片先要處理在保存,這裡就有問題了,所以需要在界面前台中添加控件,醫用AForge.Controls,然後添加到工具箱,然後將VideoSourcePlayer控件拖到窗體中,想要得到單張圖像處理:

Bitmap bmp = videoSourcePlayer1.GetCurrentFrame();

這樣就可以拿來處理了,AForge類庫是非常的強大,這裡只是冰山一角,文章不足之處還請大家多多指正,歡迎提出寶貴意見和建議。謝謝。。。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved