Common.cs 6.9 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 bool 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 bool 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 bool GrabOne(int index);
        public abstract bool GrabOne(string name);
   //     public abstract bool GrabContinuous(int index);
        public abstract void GrabStop(int index);
        public abstract Bitmap GrabOneImage(string name);

    }





}