C#調用攝像頭實現拍照功能

前言
老師要求咱們學生作一套拍照身份驗證系統,通過長時間的學習,有了這篇文章,但願能幫到讀者們。git

正文
首先介紹本文的主角:AForge
建立一個C#項目,引用必備的幾個DLLide

AForge.dll
AForge.Controls.dll
AForge.Imaging.dll
AForge.Math.dll
AForge.Video.DirectShow.dll
AForge.Video.dll

這些DLL讀者們能夠在文末下載我附帶的Demon學習

引用必要的命名空間測試

using AForge.Controls;
using AForge.Video;
using AForge.Video.DirectShow;

至此,即可以開始編寫代碼了。操作系統

首先遍歷操做系統上的攝像頭控件:code

public static bool GetDevices()
        {
            try
            {
                //枚舉全部視頻輸入設備
                videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
                if (videoDevices.Count != 0)
                {
                    Console.WriteLine("已找到視頻設備.");
                    return true;
                }

                return false;
            }
            catch (Exception ex)
            {
                Console.WriteLine("error:沒有找到視頻設備!具體緣由:" + ex.Message);
                return false;
            }

        }

找到控件後就能夠初始化攝像頭:orm

private static void CameraConn()
        {
            videoSource = new VideoCaptureDevice(videoDevices[selectedDeviceIndex].MonikerString);
            vid.VideoSource = videoSource;
            vid.Start();
        }

可是這裏爲止,都只是攝像拍攝,若是須要拍照,則須要經過eventArgs.Frame.Clone()截取視頻中的某一幀圖像
這裏就須要經過事件來處理:視頻

public static void GrabBitmap()
        {
            if (videoSource == null)
            {
                return;
            }
            videoSource.NewFrame += new NewFrameEventHandler(videoSource_NewFrame); //新建事件
        }

        static void videoSource_NewFrame(object sender, NewFrameEventArgs eventArgs)
        {
            Bitmap bmp = (Bitmap)eventArgs.Frame.Clone();   //Clone攝像頭中的一幀
            bmp.Save(path, ImageFormat.Png);
            videoSource.NewFrame -= new NewFrameEventHandler(videoSource_NewFrame);        //若是這裏不寫這個,一下子會不停的拍照,
        }

代碼中的path變量就是圖片保存的位置,讀者們能夠自行設置路徑。我這裏默認是用戶桌面下的Temp.png文件事件

測試代碼下載地址:https://gitee.com/GiveCVE/csharp_camera/raw/master/OpenCamera.zip圖片

相關文章
相關標籤/搜索