ImageAcqModel.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. using PropertyGridLib.Attributes;
  2. using PropertyGridLib.Controls;
  3. using System;
  4. using System.ComponentModel;
  5. using TeamAAS.Camera.Enums;
  6. using TeamAAS.Camera.Images;
  7. using TeamAAS.FlowEngine.FormulaData;
  8. using Plugins.Standard.Core;
  9. namespace Plugins.Standard.Models
  10. {
  11. /// <summary>
  12. /// 图像采集来源。
  13. /// </summary>
  14. [Serializable]
  15. public enum AcqImageSource
  16. {
  17. /// <summary>从已注册的相机设备采集</summary>
  18. [Description("相机采集")]
  19. 相机采集 = 0,
  20. /// <summary>加载指定的本地图像文件</summary>
  21. [Description("本地图像")]
  22. 本地图像 = 1,
  23. /// <summary>从本地目录按顺序(可循环)读取图像</summary>
  24. [Description("本地目录")]
  25. 本地目录 = 2,
  26. }
  27. [System.Serializable]
  28. public class ImageAcqModel : TeamAAS.FlowEditor.Plugins.BasePluginModel
  29. {
  30. [DisplayName("图像来源")]
  31. [Description("选择图像来源:相机采集 / 本地图像 / 本地目录")]
  32. [Category("图像来源")]
  33. public AcqImageSource Source { get; set; } = AcqImageSource.相机采集;
  34. [DisplayName("相机设备")]
  35. [Description("选择已注册的相机设备")]
  36. [Category("相机设置")]
  37. [TypeConverter(typeof(CameraDeviceConverter))]
  38. public string CameraName { get; set; }
  39. [DisplayName("曝光时间(us)")]
  40. [Description("设置相机曝光时间,单位微秒")]
  41. [Category("相机设置")]
  42. [FormulaEditor(typeof(PluginDataProvider))]
  43. public FormulaBound<float> ExposureTime { get; set; } = new FormulaBound<float>(10000);
  44. [DisplayName("增益(dB)")]
  45. [Description("设置相机增益,单位分贝")]
  46. [Category("相机设置")]
  47. [FormulaEditor(typeof(PluginDataProvider))]
  48. public FormulaBound<float> Gain { get; set; } = new FormulaBound<float>(0);
  49. [DisplayName("Gamma")]
  50. [Description("设置Gamma校正值,1.0为无校正,>1.0提亮暗部,<1.0压暗暗部")]
  51. [Category("图像处理")]
  52. [FormulaEditor(typeof(PluginDataProvider))]
  53. public FormulaBound<float> Gamma { get; set; } = new FormulaBound<float>(1.0f);
  54. [DisplayName("自动打开设备")]
  55. [Description("采集前自动打开相机设备")]
  56. [Category("采集选项")]
  57. public bool AutoOpen { get; set; } = true;
  58. [DisplayName("触发模式")]
  59. [Description("跟随相机=不下发触发设置,沿用相机自身配置(默认,兼容既有流程);连续采集=自由运行;软触发=每次取相发一条软件命令;硬触发=等外部信号(通用 Line0,Basler 为 Line1)。可选项随所选相机能力动态变化,不支持的模式会被拒绝")]
  60. [Category("相机设置")]
  61. public CameraTriggerMode TriggerMode { get; set; } = CameraTriggerMode.跟随相机;
  62. [DisplayName("本地图像文件")]
  63. [Description("图像来源为「本地图像」时加载的文件完整路径")]
  64. [Category("本地图像")]
  65. public string LocalImagePath { get; set; } = "";
  66. [DisplayName("本地图像目录")]
  67. [Description("图像来源为「本地目录」时读取的文件夹路径")]
  68. [Category("本地目录")]
  69. public string LocalImageDir { get; set; } = "";
  70. [DisplayName("循环读取")]
  71. [Description("本地目录读取到末尾后自动回到第一张,循环取图")]
  72. [Category("本地目录")]
  73. public bool CyclicRead { get; set; } = true;
  74. [DisplayName("应用Gamma到本地图")]
  75. [Description("对本地加载的图像做软件 Gamma 校正(相机采集由相机硬件处理,不受此选项影响)")]
  76. [Category("图像处理")]
  77. public bool ApplyGamma { get; set; } = true;
  78. /// <summary>
  79. /// 最近一次采集/加载得到的图像,仅供自定义视图预览显示。
  80. /// 运行态数据,不参与流程文件序列化(BinaryFormatter 会跳过 [NonSerialized] 字段)。
  81. /// </summary>
  82. [Browsable(false)]
  83. [NonSerialized]
  84. private GenImage _previewImage;
  85. [Browsable(false)]
  86. [Newtonsoft.Json.JsonIgnore]
  87. public GenImage PreviewImage
  88. {
  89. get => _previewImage;
  90. set => _previewImage = value;
  91. }
  92. /// <summary>
  93. /// 本地目录循环读取的游标(运行态,不序列化)。
  94. /// </summary>
  95. [Browsable(false)]
  96. [NonSerialized]
  97. private int _dirCursor;
  98. [Browsable(false)]
  99. [Newtonsoft.Json.JsonIgnore]
  100. public int DirCursor
  101. {
  102. get => _dirCursor;
  103. set => _dirCursor = value;
  104. }
  105. }
  106. }