Common.cs 7.0 KB
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;

namespace CodeLibrary
{

    /// <summary>
    /// 相机
    /// </summary>
    public class Camera : ClsCamera
    {
        public static ClsCamera _cam;
        private static CameraType _type;

        /// <summary>
        /// 连续采集事件
        /// </summary>
        public static event Continuous Continuous_Event;


        /// <summary>
        /// 相机
        /// </summary>
        private Camera()
        { }

        /// <summary>
        /// 相机类型
        /// </summary>
        public static CameraType Type
        {
            set
            {
                if (_cam != null)
                {
                    return;
                    //    _cam.CloseAll();
                }
                _type = value;
                switch (_type)
                {
                    case CameraType.HIK:
                        _cam = new HIK();
                        ((HIK)_cam).Continuous_Event += Camera_Continuous_Event;
                        break;
                        //case CameraType.Basler:
                        //    _cam = new Basler();
                        //    ((Basler)_cam).Continuous_Event += Camera_Continuous_Event;
                        //    break;
                }
            }
            get
            {
                return _type;
            }
        }

        /// <summary>
        /// 错误信息
        /// </summary>
        public override string ErrInfo => _cam.ErrInfo;

        /// <summary>
        /// 相机是否打开
        /// </summary>
        public override bool[] IsOpen => _cam.IsOpen;

        /// <summary>
        /// 相机总数
        /// </summary>
        public override int Count => _cam.Count;

        /// <summary>
        /// 相机名称
        /// </summary>
        public override string[] Name => _cam.Name;

        ///// <summary>
        ///// 图像宽度
        ///// </summary>
        //public override int[] Width => _cam.Width;

        ///// <summary>
        ///// 图像高度
        ///// </summary>
        //public override int[] Height => _cam.Height;

        ///// <summary>
        ///// 图像缓存
        ///// </summary>
        //public override byte[] Buffer => _cam.Buffer;

        /// <summary>
        /// 图像
        /// </summary>
        //public override Bitmap Image => _cam.Image;




        /// <summary>
        /// 加载
        /// </summary>
        /// <returns></returns>
        public override bool Load()
        {
            if (_cam == null)
                return false;
            else
                return _cam.Load();
        }

        /// <summary>
        /// 打开相机
        /// </summary>
        /// <param name="index"></param>
        /// <returns></returns>
        public override bool Open(int index)
        {
            return _cam.Open(index);
        }

        /// <summary>
        /// 打开相机
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public override bool Open(string name)
        {
            return _cam.Open(name);
        }

        /// <summary>
        /// 打开所有相机
        /// </summary>
        /// <returns></returns>
        public override bool OpenAll()
        {
            return _cam.OpenAll();
        }

        ///// <summary>
        ///// 连续抓取图像
        ///// </summary>
        ///// <returns></returns>
        //public override bool GrabContinuous(int index)
        //{
        //    return _cam.GrabContinuous(  index);
        //}

        /// <summary>
        /// 抓取一次图像
        /// </summary>
        /// <returns></returns>
        public override Bitmap GrabOne(int index)
        {
            return _cam.GrabOne(index);
        }

        ///// <summary>
        ///// 抓取一次图像
        ///// </summary>
        ///// <param name="index"></param>
        ///// <returns></returns>
        //public override bool GrabOne(int index)
        //{
        //    return _cam.GrabOne(index);
        //}

        /// <summary>
        /// 抓取一次图像
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public override Bitmap GrabOne(string name)
        {
            return _cam.GrabOne(name);
        }

        ///// <summary>
        ///// 停止连续抓取
        ///// </summary>
        //public override void GrabStop(int index)
        //{
        //    _cam.GrabStop(  index);
        //}

        /// <summary>
        /// 关闭所有相机
        /// </summary>
        public override void CloseAll()
        {
            _cam.CloseAll();
        }

        /// <summary>
        /// 关闭相机
        /// </summary>
        public override void Close(int index)
        {
            _cam.Close(index);
        }

        public override void Close(string name)
        {
            _cam.Close(name);
        }


        private static void Camera_Continuous_Event()
        {
            Continuous_Event?.Invoke();
        }

        public override Bitmap GrabOneImage(string name)
        {
            return _cam.GrabOneImage(name);
        }
    }

    /// <summary>
    /// 相机类型
    /// </summary>
    public enum CameraType
    {
        /// <summary>
        /// 海康
        /// </summary>
        HIK,
        /// <summary>
        /// Basle
        /// </summary>
        Basler
    }

    public abstract class ClsCamera
    {
        /// <summary>
        /// 所有相机的名称
        /// </summary>
        protected List<string> cameraName;
        protected string _errInfo;
        protected bool[] _isOpen;
        protected int _count;
        protected string[] _name;
        protected int[] _width;
        protected int[] _height;
        //protected byte[] _buffer;
        //     protected Bitmap _image;
        //  protected int _index;


        public delegate void Continuous();



        public virtual string ErrInfo => _errInfo;
        public virtual bool[] IsOpen => _isOpen;
        public virtual int Count => _count;
        public virtual string[] Name => _name;
        //public virtual int[] Width => _width;
        //public virtual int[] Height => _height;
        //public virtual byte[] Buffer => _buffer;
        //  public virtual Bitmap Image => _image;

        public abstract bool Load();
        public abstract bool OpenAll();
        public abstract bool Open(int index);
        public abstract bool Open(string name);
        public abstract void CloseAll();
        public abstract void Close(int index);
        public abstract void Close(string name);
        // public abstract bool GrabOne();
        public abstract Bitmap GrabOne(int index);
        public abstract Bitmap GrabOne(string name);
        //     public abstract bool GrabContinuous(int index);
        //   public abstract void GrabStop(int index);
        public abstract Bitmap GrabOneImage(string name);

    }





}