using System.ComponentModel; using System.Drawing; using System.Runtime.CompilerServices; using System.Xml.Serialization; namespace Hawkeye.VisionBuilder.Workflow.ColorStudioClasses { public class HSIValue { public HSIValue() { } public int MinSize { get; set; } = 1; public int MinComponentSize { get; set; } = 1; public int PreFilterId { get; set; } = 0; public int PreFilterSize { get; set; } = 10; public int Closing { get; set; } public int Circle { get; set; } = 1; public string Tag { get; set; } private Range _hue = new Range() {Minimum = 0,Maximum = 10}; private Range _saturation = new Range() { Minimum = 0, Maximum = 10 }; private Range _intensity = new Range() { Minimum = 0, Maximum = 10 }; public string Name { get; set; } public Range Hue { get { return _hue; } set { if (Equals(value, _hue)) return; _hue = value; OnPropertyChanged(); } } public Range Saturation { get { return _saturation; } set { if (Equals(value, _saturation)) return; _saturation = value; OnPropertyChanged(); } } public Range Intensity { get { return _intensity; } set { if (Equals(value, _intensity)) return; _intensity = value; OnPropertyChanged(); } } public bool Active { get; set; } public List SubColors { get; set; }=new List(); public Rectangle GetRectangle() { Rectangle th = new Rectangle((int) (Hue.Minimum), (int) (Saturation.Minimum), (int) (Hue.Maximum) - (int) (Hue.Minimum), (int) (Saturation.Maximum) - (int) (Saturation.Minimum)); return th; } [XmlIgnore] public bool ShowStar { get; set; } public int Dilation { get; set; } public override string ToString() { return $"{Name} {Hue}:{Saturation}:{Intensity}{(ShowStar?"*":"")}"; } public static explicit operator ColorConfig(HSIValue value) { var config = new ColorConfig() { ClosingCircleRadius = value.Circle, HueHighSaturationMaxGrey = value.Hue.Maximum, HueHighSaturationMinGrey = value.Hue.Minimum, HighSaturationMaxGrey = value.Saturation.Maximum, HighSaturationMinGrey = value.Saturation.Minimum, IntensityMaxGrey = value.Intensity.Maximum, IntensityMinGrey = value.Intensity.Minimum, MaxBlobSize = value.MinSize, MedianMargin = 1, MedianRadius = 10, UseMedianFilter = true, }; return config; } public static implicit operator HSIValue(ColorConfig config) { return new HSIValue() { Hue = new Range(config.HueHighSaturationMinGrey, config.HueHighSaturationMaxGrey), Saturation = new Range(config.HighSaturationMinGrey, config.HighSaturationMaxGrey), Intensity = new Range(config.IntensityMinGrey, config.IntensityMaxGrey), Circle = (int)config.ClosingCircleRadius, MinSize = config.MaxBlobSize }; } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } }