using PropertyGridLib.Attributes; using PropertyGridLib.Controls; using System; using System.ComponentModel; using TeamAAS.Camera.Enums; using TeamAAS.Camera.Images; using TeamAAS.FlowEngine.FormulaData; using Plugins.Standard.Core; namespace Plugins.Standard.Models { /// /// 图像采集来源。 /// [Serializable] public enum AcqImageSource { /// 从已注册的相机设备采集 [Description("相机采集")] 相机采集 = 0, /// 加载指定的本地图像文件 [Description("本地图像")] 本地图像 = 1, /// 从本地目录按顺序(可循环)读取图像 [Description("本地目录")] 本地目录 = 2, } [System.Serializable] public class ImageAcqModel : TeamAAS.FlowEditor.Plugins.BasePluginModel { [DisplayName("图像来源")] [Description("选择图像来源:相机采集 / 本地图像 / 本地目录")] [Category("图像来源")] public AcqImageSource Source { get; set; } = AcqImageSource.相机采集; [DisplayName("相机设备")] [Description("选择已注册的相机设备")] [Category("相机设置")] [TypeConverter(typeof(CameraDeviceConverter))] public string CameraName { get; set; } [DisplayName("曝光时间(us)")] [Description("设置相机曝光时间,单位微秒")] [Category("相机设置")] [FormulaEditor(typeof(PluginDataProvider))] public FormulaBound ExposureTime { get; set; } = new FormulaBound(10000); [DisplayName("增益(dB)")] [Description("设置相机增益,单位分贝")] [Category("相机设置")] [FormulaEditor(typeof(PluginDataProvider))] public FormulaBound Gain { get; set; } = new FormulaBound(0); [DisplayName("Gamma")] [Description("设置Gamma校正值,1.0为无校正,>1.0提亮暗部,<1.0压暗暗部")] [Category("图像处理")] [FormulaEditor(typeof(PluginDataProvider))] public FormulaBound Gamma { get; set; } = new FormulaBound(1.0f); [DisplayName("自动打开设备")] [Description("采集前自动打开相机设备")] [Category("采集选项")] public bool AutoOpen { get; set; } = true; [DisplayName("触发模式")] [Description("跟随相机=不下发触发设置,沿用相机自身配置(默认,兼容既有流程);连续采集=自由运行;软触发=每次取相发一条软件命令;硬触发=等外部信号(通用 Line0,Basler 为 Line1)。可选项随所选相机能力动态变化,不支持的模式会被拒绝")] [Category("相机设置")] public CameraTriggerMode TriggerMode { get; set; } = CameraTriggerMode.跟随相机; [DisplayName("本地图像文件")] [Description("图像来源为「本地图像」时加载的文件完整路径")] [Category("本地图像")] public string LocalImagePath { get; set; } = ""; [DisplayName("本地图像目录")] [Description("图像来源为「本地目录」时读取的文件夹路径")] [Category("本地目录")] public string LocalImageDir { get; set; } = ""; [DisplayName("循环读取")] [Description("本地目录读取到末尾后自动回到第一张,循环取图")] [Category("本地目录")] public bool CyclicRead { get; set; } = true; [DisplayName("应用Gamma到本地图")] [Description("对本地加载的图像做软件 Gamma 校正(相机采集由相机硬件处理,不受此选项影响)")] [Category("图像处理")] public bool ApplyGamma { get; set; } = true; /// /// 最近一次采集/加载得到的图像,仅供自定义视图预览显示。 /// 运行态数据,不参与流程文件序列化(BinaryFormatter 会跳过 [NonSerialized] 字段)。 /// [Browsable(false)] [NonSerialized] private GenImage _previewImage; [Browsable(false)] [Newtonsoft.Json.JsonIgnore] public GenImage PreviewImage { get => _previewImage; set => _previewImage = value; } /// /// 本地目录循环读取的游标(运行态,不序列化)。 /// [Browsable(false)] [NonSerialized] private int _dirCursor; [Browsable(false)] [Newtonsoft.Json.JsonIgnore] public int DirCursor { get => _dirCursor; set => _dirCursor = value; } } }