分享一个C#采集控制多个UVC摄像头设备的源码

using System;
using System.Collections.Generic;
using System.Drawing;
using SharpCamera;
using System.Windows.Forms;

namespace SharpCameraDemo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        #region 变量
        private Camera camera2 = null;
        private Camera camera1 = null;
        private CameraMgr cameraMgr = null;
        #endregion

        #region 事件
        private void Form2_Load(object sender, EventArgs e)
        {
            //在调用SharpCamera类库其他任何类和方法之前,必须先调用本方法设置授权Key,如果是试用,则传入Test即可。
            //试用版有时间限制,只能运行十分钟,之后会被加水印,正式授权请访问: http://sharpcamera.zzsgzn.com/?MultiCameraDemo
            KeyMgr.SetKey("Test");

            //实例化一个CameraMgr
            cameraMgr = new CameraMgr();

            //得到当前计算机的所有已安装摄像头
            List<string> lstCameraNameInstalled = cameraMgr.GetCameraNameList();
            
            if(lstCameraNameInstalled.Count < 2)
            {
                throw new Exception("您的计算机上已安装的UVC摄像头少于2个,本程序无法正常运行!");
            }

            #region 初始化摄像头1
            //选定该摄像头,摄像头索引为0,您也可以用摄像头名称的方式来选定
            camera1 = cameraMgr.ChooseCamera(0);

            //订阅帧图片上报的事件
            camera1.OnVideoFrameCaptrue += VideoFrameCaptrue1;

            //打开该摄像头
            camera1.Open();

            //修改当前分辨率
            camera1.Resolution = camera1.AllSupportedResolution[0];
            #endregion

            #region 初始化摄像头2
            //选定该摄像头,这里摄像头索引为1
            camera2 = cameraMgr.ChooseCamera(1);

            //订阅帧图片上报的事件
            camera2.OnVideoFrameCaptrue += VideoFrameCaptrue2;

            //打开该摄像头
            camera2.Open();

            //修改当前分辨率
            camera2.Resolution = camera2.AllSupportedResolution[0];
            #endregion
        }

        public void VideoFrameCaptrue1(Bitmap img)
        {
            Bitmap temp = ((Bitmap)img).Clone(new Rectangle(0, 0, img.Width, img.Height), img.PixelFormat);
            if (this.InvokeRequired)
            {
                this.pictureBox1.BeginInvoke(new MethodInvoker(delegate ()
                {
                    if (pictureBox1.Image != null)
                    {
                        pictureBox1.Image.Dispose();
                        pictureBox1.Image = null;
                    }
                    this.pictureBox1.Image = temp;
                }));
            }
            else
            {
                if (pictureBox1.Image != null)
                {
                    pictureBox1.Image.Dispose();
                    pictureBox1.Image = null;
                }
                this.pictureBox1.Image = temp;
            }
        }

        public void VideoFrameCaptrue2(Bitmap img)
        {
            Bitmap temp = ((Bitmap)img).Clone(new Rectangle(0, 0, img.Width, img.Height), img.PixelFormat);
            if (this.InvokeRequired)
            {
                this.pictureBox2.BeginInvoke(new MethodInvoker(delegate ()
                {
                    if (pictureBox2.Image != null)
                    {
                        pictureBox2.Image.Dispose();
                        pictureBox2.Image = null;
                    }
                    this.pictureBox2.Image = temp;
                }));
            }
            else
            {
                if (pictureBox2.Image != null)
                {
                    pictureBox2.Image.Dispose();
                    pictureBox2.Image = null;
                }
                this.pictureBox2.Image = temp;
            }
        }

        private void Form2_FormClosing(object sender, FormClosingEventArgs e)
        {
            //退出时释放资源
            if (camera1 != null)
            {
                camera1.Close();
                camera1.Dispose();
                camera1 = null;
            }

            if (camera2 != null)
            {
                camera2.Close();
                camera2.Dispose();
                camera2 = null;
            }

            if (cameraMgr != null)
            {
                cameraMgr.Dispose();
                cameraMgr = null;
            }
        }

        #endregion

        #region 属性设置面板

        private void Button1_Click(object sender, EventArgs e)
        {
            if (camera1 != null)
            {
                //显示设置对话框
                camera1.ShowPropertyPage();
            }
        }

        private void Button2_Click(object sender, EventArgs e)
        {
            if (camera2 != null)
            {
                //显示设置对话框
                camera2.ShowPropertyPage();
            }
        }
        #endregion

        #region 版权
        private void button5_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Process.Start("http://sharpcamera.zzsgzn.com/?MultiCameraDemo");
        }

        private void button4_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Process.Start("http://www.zzsgzn.com/?MultiCameraDemo");
        }

        private void button3_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Process.Start("http://wpa.qq.com/msgrd?v=3&uin=3535600244&site=qq&menu=yes");
        }

        #endregion

        #region 亮度
        private void btnBrightness1_Click(object sender, EventArgs e)
        {
            if (camera1 != null)
            {
                //获取亮度的属性对象
                CameraProperty brightnessPro = camera1.Brightness;

                //调整其值到最大值,也可以指定为其他合法值
                brightnessPro.Current = brightnessPro.Max;
            }
        }

        private void btnBrightness2_Click(object sender, EventArgs e)
        {
            if (camera1 != null)
            {
                //获取亮度的属性对象
                CameraProperty brightnessPro = camera1.Brightness;

                //调整其值到最小值,也可以指定为其他合法值
                brightnessPro.Current = brightnessPro.Min;
            }
        }

        private void btnBrightness3_Click(object sender, EventArgs e)
        {
            if (camera1 != null)
            {
                //获取亮度的属性对象
                CameraProperty brightnessPro = camera1.Brightness;

                //调整其值到默认值,也可以指定为其他合法值
                brightnessPro.Current = brightnessPro.Default;
            }
        }

        //下边为第二个摄像头的亮度控制

        private void Button11_Click(object sender, EventArgs e)
        {
            if (camera2 != null)
            {
                //获取亮度的属性对象
                CameraProperty brightnessPro = camera2.Brightness;

                //调整其值到最大值,也可以指定为其他合法值
                brightnessPro.Current = brightnessPro.Max;
            }
        }

        private void Button12_Click(object sender, EventArgs e)
        {
            if (camera2 != null)
            {
                //获取亮度的属性对象
                CameraProperty brightnessPro = camera2.Brightness;

                //调整其值到最小值,也可以指定为其他合法值
                brightnessPro.Current = brightnessPro.Min;
            }
        }

        private void Button21_Click(object sender, EventArgs e)
        {
            if (camera2 != null)
            {
                //获取亮度的属性对象
                CameraProperty brightnessPro = camera2.Brightness;

                //调整其值到默认值,也可以指定为其他合法值
                brightnessPro.Current = brightnessPro.Default;
            }
        }
        #endregion


    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章