AForge.net如何加到C#工程里边

AForge.net如何加到C#工程里边,第1张

首先用到AForge类库下载地址

然后引用AForge,AForge.Controls(这个是控件,可以添加到工具箱中),AForge.Imaging,AForge.Video,AForge.Video.DirectShow

然后直接上代码

[csharp] view plain copy print?

private FilterInfoCollection videoDevices

private VideoCaptureDevice videoSource

public int selectedDeviceIndex = 0

private FilterInfoCollection videoDevices

       private VideoCaptureDevice videoSource

       public int selectedDeviceIndex = 0

下面是获取设备

[csharp] view plain copy print?

public FilterInfoCollection GetDevices()

{

try

{

//枚举所有视频输入设备

videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice)

if (videoDevices.Count != 0)

{

LogClass.WriteFile("已找到视频设备.")

return videoDevices

}

else

return null

}

catch (Exception ex)

{

LogClass.WriteFile("error:没有找到视频设备!具体原因:" + ex.Message)

return null

}

}

public FilterInfoCollection GetDevices()

        {

            try

            {

                //枚举所有视频输入设备

                videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice)

                if (videoDevices.Count != 0)

                {

                    LogClass.WriteFile("已找到视频设备.")

                    return videoDevices

                }

                else

                    return null

            }

            catch (Exception ex)

            {

                LogClass.WriteFile("error:没有找到视频设备!具体原因:" + ex.Message)

                return null

            }

        }

选择设备,然后连接摄像头

[csharp] view plain copy print?

<p> /// <summary>

/// 连接视频摄像头

/// </summary>

/// <param name="deviceIndex"></param>

/// <param name="resolutionIndex"></param>

/// <returns></returns>

public VideoCaptureDevice VideoConnect(int deviceIndex = 0, int resolutionIndex = 0)

{

if (videoDevices.Count <= 0)

return null

selectedDeviceIndex = deviceIndex

videoSource = new VideoCaptureDevice(videoDevices[deviceIndex].MonikerString)</p><p>            return videoSource

}</p>

<p> /// <summary>

        /// 连接视频摄像头

        /// </summary>

        /// <param name="deviceIndex"></param>

        /// <param name="resolutionIndex"></param>

        /// <returns></returns>

        public VideoCaptureDevice VideoConnect(int deviceIndex = 0, int resolutionIndex = 0)

        {

            if (videoDevices.Count <= 0)

                return null

            selectedDeviceIndex = deviceIndex

            videoSource = new VideoCaptureDevice(videoDevices[deviceIndex].MonikerString)</p><p>            return videoSource

        }</p>

[csharp] view plain copy print?

//抓图,拍照,单帧

public void GrabBitmap(string path)

{

if (videoSource == null)

return

g_Path = path

videoSource.NewFrame += new NewFrameEventHandler(videoSource_NewFrame)

}

//抓图,拍照,单帧

public void GrabBitmap(string path)

       {

           if (videoSource == null)

               return

           g_Path = path

           videoSource.NewFrame += new NewFrameEventHandler(videoSource_NewFrame)

       }

[csharp] view plain copy print?

void videoSource_NewFrame(object sender, AForge.Video.NewFrameEventArgs eventArgs)

{

Bitmap bmp = (Bitmap)eventArgs.Frame.Clone()

string fullPath = path + "temp\\"

if (!Directory.Exists(fullPath))

Directory.CreateDirectory(fullPath)

string img = fullPath + DateTime.Now.ToString("yyyyMMdd hhmmss") + ".bmp"

bmp.Save(img)

void videoSource_NewFrame(object sender, AForge.Video.NewFrameEventArgs eventArgs)

       {

           Bitmap bmp = (Bitmap)eventArgs.Frame.Clone()

           string fullPath = path + "temp\\"

           if (!Directory.Exists(fullPath))

               Directory.CreateDirectory(fullPath)

           string img = fullPath + DateTime.Now.ToString("yyyyMMdd hhmmss") + ".bmp"

           bmp.Save(img)

[csharp] view plain copy print?

//如果这里不写这个,一会儿会不停的拍照,

videoSource.NewFrame -= new NewFrameEventHandler(videoSource_NewFrame)

}

//如果这里不写这个,一会儿会不停的拍照,

           videoSource.NewFrame -= new NewFrameEventHandler(videoSource_NewFrame)

       }

这样就完成了 *** 作摄像头的工作

但是发现一个问题,如果要拍照得到的照片先要处理在保存,这里就有问题了,所以需要在界面前台中添加控件,医用AForge.Controls,然后添加到工具箱,然后将VideoSourcePlayer控件拖到窗体中,想要得到单张图像处理:

Bitmap bmp = videoSourcePlayer1.GetCurrentFrame()

这样就可以拿来处理了,AForge类库是非常的强大,这里只是冰山一角,文章不足之处还请大家多多指正,欢迎提出宝贵意见和建议。谢谢。。。

AForge.video依赖于AForge (core library) 2.2.5。

你需要同时引用Aforge核心库,才能使用Aforge.video。

我上传到附件里,你下载引用它。

//看了下你的代码,错误的原因就是连接的时候重新定义了一个对象。稍改下就好。 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.Threading

using AForge

using AForge.Video

using AForge.Video.DirectShow

using AForge.Imaging

using AForge.Imaging.Filters

using System.IO

namespace Camera

{

    public partial class Form1 : Form

    {

        private FilterInfoCollection videoDevices

        public VideoCaptureDevice videoSource  

        private int flag = 1

        private string dirc = System.AppDomain.CurrentDomain.BaseDirectory + "JPG" //截图保存的目录  

        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()

        }

        private void CameraConn()

        {   //你这里重新定义了一个对象,所以出错

            videoSource = new VideoCaptureDevice(videoDevices[tscbxCameras.SelectedIndex].MonikerString)

            videoSource.DesiredFrameSize = new Size(320, 240)

            videoSource.DesiredFrameRate = 1

            videPlayer.VideoSource = videoSource

            videPlayer.Start()

        }

        private void toolStripButton2_Click(object sender, EventArgs e)

        {

            videPlayer.SignalToStop()

            videPlayer.WaitForStop()

        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)

        {

            toolStripButton2_Click(null, null)

        }

        private void toolStripButton3_Click(object sender, EventArgs e)

        {

            //不懂截图,但还是给你简单完善了下

            flag = 0

            if (videoSource == null)

            {

                MessageBox.Show("请先连接摄像头")                

            }

            else if (!videoSource.IsRunning)

            {

                MessageBox.Show("摄像头已经关闭,请重新打开")

            }

            else

            {

                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

            }

        } 

    }

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11745218.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-18
下一篇2023-05-18

发表评论

登录后才能评论

评论列表(0条)

    保存