| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
enpc
6年前发布

c# 使用AForge.NET操作摄像头操作代码

c# 使用AForge.NET操作摄像头操作代码
AForge.NET是一个专门为开发者和研究者基于C#框架设计的,这个框架提供了不同的类库和关于类库的资源,还有很多应用程序例子,包括计算机视觉与人工智能,图像处理,神经网络,遗传算法,机器学习,机器人等领域。 根据网上的方法,运行程序摄像头出来了,但是怎么截图呢?找到一个显示图片方法如下

    private void video_NewFrame(object sender, NewFrameEventArgs eventArgs)           {               Bitmap img = (Bitmap)eventArgs.Frame.Clone();               //do processing here               pictureBox1.Image = img;           }    
开始参考这句代码写了:
  private void video_NewFrame(object sender, NewFrameEventArgs eventArgs)           {               Bitmap img = (Bitmap)eventArgs.Frame.Clone();               string imgPath = dirc + "/" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".jpg";               img.Save(imgPath);           }      
但是点击截图程序就自动不停截了大量的图片,最后导致程序出问题。想了一个笨方法,可以只截一次图:
     private int flag = 1;      /// <summary>            /// 截图            /// </summary>            private void toolStripButton3_Click(object sender, EventArgs e)            {                flag = 0;                videoSource.NewFrame += new NewFrameEventHandler(video_NewFrame);            }                  private void video_NewFrame(object sender, NewFrameEventArgs eventArgs)            {                Bitmap bitmap = (Bitmap)eventArgs.Frame.Clone();                if (flag == 0)                {                    string img = dirc + "/" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".jpg";                    bitmap.Save(img);                    flag = 1;                    }            }             
完整的程序代码如下:
  using System;    using System.Collections.Generic;    using System.ComponentModel;    using System.Data;    using System.Drawing;    using System.Drawing.Imaging;    using System.Text;    using System.Windows.Forms;    using System.IO;    using AForge;    using AForge.Video;    using AForge.Video.DirectShow;    using AForge.Imaging;    using AForge.Imaging.Filters;        namespace Camera    {        public partial class Form1 : Form        {            private FilterInfoCollection videoDevices;            private VideoCaptureDevice videoSource;            private int flag = 1;            private string dirc = System.AppDomain.CurrentDomain.BaseDirectory + "Images"; //截图保存的目录                               public Form1()            {                InitializeComponent();            }                private void Form1_Load(object sender, EventArgs e)            {                if (!Directory.Exists(dirc))                    Directory.CreateDirectory(dirc);                    try                {                    // 枚举所有视频输入设备                    videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);                    if (videoDevices.Count == 0)                        throw new ApplicationException();                        foreach (FilterInfo device in videoDevices)                    {                        tscbxCameras.Items.Add(device.Name);                    }                        tscbxCameras.SelectedIndex = 0;                }                catch (ApplicationException)                {                    tscbxCameras.Items.Add("No local capture devices");                    videoDevices = null;                }            }                private void toolStripButton1_Click(object sender, EventArgs e)            {                CameraConn();            }                /// <summary>            /// 连接开启摄像头            /// </summary>            private void CameraConn()            {                videoSource = new VideoCaptureDevice(videoDevices[tscbxCameras.SelectedIndex].MonikerString);                videoSource.DesiredFrameSize = new Size(500, 300);                videoSource.DesiredFrameRate = 1;                videPlayer.VideoSource = videoSource;                videPlayer.Start();            }            /// <summary>            /// 关闭摄像头            /// </summary>            private void toolStripButton2_Click(object sender, EventArgs e)            {                videPlayer.SignalToStop();                videPlayer.WaitForStop();            }                private void Form1_FormClosing(object sender, FormClosingEventArgs e)            {                toolStripButton2_Click(null, null);            }            /// <summary>            /// 截图            /// </summary>            private void toolStripButton3_Click(object sender, EventArgs e)            {                flag = 0;                videoSource.NewFrame += new NewFrameEventHandler(video_NewFrame);            }                  private void video_NewFrame(object sender, NewFrameEventArgs eventArgs)            {                Bitmap bitmap = (Bitmap)eventArgs.Frame.Clone();                if (flag == 0)                {                    string img = dirc + "/" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".jpg";                    bitmap.Save(img);                    flag = 1;                    }            }               }    }