-
利用AForge库在C#中调用摄像头
资源介绍
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 = "设备停止";
}
}
}
}