c# 使用AForge.NET操作攝像頭操作代碼

enpc 9年前發布 | 4K 次閱讀 C#

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;
}
</pre> 開始參考這句代碼寫了:

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);
}

</pre> 但是點擊截圖程序就自動不停截了大量的圖片,最后導致程序出問題。想了一個笨方法,可以只截一次圖:


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;
}
}

</pre> 完整的程序代碼如下:

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;      
        }  
    }         
}  

}
</pre>

 本文由用戶 enpc 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!