Common.cs 4.0 KB
using CodeLibrary.camera;
using HalconDotNet;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;

namespace CodeLibrary
{

    /// <summary>
    /// 相机
    /// </summary>
    public class Camera 
    {
        public static ClsCamera _cam;
        private static CameraType _type;
         
        /// <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;
                    case CameraType.HIKIDMVS:
                        _cam = new HIKIDMVS();
                        //((HIKIDMVS)_cam).Continuous_Event += Camera_Continuous_Event;
                        break;
                }
            }
            get
            {
                return _type;
            }
        } 
    }

    /// <summary>
    /// 相机类型
    /// </summary>
    public enum CameraType
    {
        /// <summary>
        /// 海康
        /// </summary>
        HIK,
        /// <summary>
        /// 海IDMVS
        /// </summary>
        HIKIDMVS,
        /// <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, PixelType pt = PixelType.Default);
        public abstract Bitmap GrabOne(string name, PixelType pt = PixelType.Default);
        //     public abstract bool GrabContinuous(int index);
        //   public abstract void GrabStop(int index);
        public abstract Bitmap GrabOneImage(string name, PixelType pt= PixelType.Default);
        public abstract HObject CaptureOnImage(string name,out List<CodeInfo> cc);
        public abstract HObject CaptureOnImage(string name, out Bitmap bmp, out List<CodeInfo> codeInfos, bool nohalcon = false);
        public abstract bool ProcessOnImage(string name, out object[] result, params Func<string,Bitmap, object>[] func);

        //扫码相机专用
        public abstract List<CodeInfo> GetImageAndIdentifyCode(out Bitmap bitmap);
    }
    public enum PixelType
    {
        MONO8,
        RGB8,
        Default = MONO8,
    }
}