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

c# 利用AForge.NET組件操作攝像頭

編輯:C#入門知識

AForge.NET是一個專門為開發者和研究者基於C#框架設計的,這個框架提供了不同的類庫和關於類庫的資源,還有很多應用程序例子,包括計算機視覺與人工智能,圖像處理,神經網絡,遺傳算法,機器學習,機器人等領域。  根據網上的方法,運行程序攝像頭出來了,但是怎麼截圖呢?找到一個顯示圖片方法如下   [csharp]   private void video_NewFrame(object sender, NewFrameEventArgs eventArgs)          {              Bitmap img = (Bitmap)eventArgs.Frame.Clone();              //do processing here              pictureBox1.Image = img;          }     開始參考這句代碼寫了: [csharp]   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);          }     但是點擊截圖程序就自動不停截了大量的圖片,最後導致程序出問題。想了一個笨方法,可以只截一次圖:   [csharp]   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;                   }           }              完整的程序代碼如下:   [csharp]  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;                   }           }              }   }       界面效果如下:  

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