C# 使用AForge调用摄像头

AForge官网地址:http://www.aforgenet.com/framework/

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using AForge.Video.DirectShow;
using AForge.Video;

namespace AForgeDemo
{
    public partial class Form1 : Form
    {
        private bool DeviceExist = false;
        private FilterInfoCollection videoDevices;
        private VideoCaptureDevice videoSource = null;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            getCamList();
        }


        private void getCamList()
        {
            try
            {
                videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
                cbDev.Items.Clear();
                if (videoDevices.Count == 0)
                    throw new ApplicationException();
                DeviceExist = true;
                foreach (FilterInfo device in videoDevices)
                {
                    cbDev.Items.Add(device.Name);
                }
                cbDev.SelectedIndex = 0;
            }
            catch (ApplicationException)
            {
                DeviceExist = false;
                cbDev.Items.Add("无设备");
            }
        }

        private void CloseVideoSource()
        {
            if (!(videoSource == null))
                if (videoSource.IsRunning)
                {
                    videoSource.SignalToStop();
                    videoSource = null;
                }
        }

        private void video_NewFrame(object sender, NewFrameEventArgs eventArgs)
        {
            Bitmap img = (Bitmap)eventArgs.Frame.Clone();
            picVideo.Image = img;
        }


        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            CloseVideoSource();
        }


        private void btnOpen_Click(object sender, EventArgs e)
        {
            if (DeviceExist)
            {
                videoSource = new VideoCaptureDevice(videoDevices[cbDev.SelectedIndex].MonikerString);
                videoSource.NewFrame += new NewFrameEventHandler(video_NewFrame);
                CloseVideoSource();
                videoSource.DesiredFrameSize = new Size(picVideo.Width, picVideo.Height);
                videoSource.Start();
                lbinfo.Text = "设备运行...";
            }
            else
            {
                lbinfo.Text = "没有选择设备";
            }
        }

        private void btnStop_Click(object sender, EventArgs e)
        {
            if (videoSource.IsRunning)
            {
                CloseVideoSource();
                lbinfo.Text = "设备停止";
            }
        }

    }
}

效果图:

附件下载

posted @ 2023-04-27 13:37  天天代码码天天  阅读(147)  评论(0编辑  收藏  举报  来源