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;
}
}
}