private void SwitchHsiAlgorithm(HsiAlgorithm algorithm) { trayMenuHsiAlgorithmGeometry.Checked = false; trayMenuHsiAlgorithmAxis.Checked = false; trayMenuHsiAlgorithmSegment.Checked = false; trayMenuHsiAlgorithmBajon.Checked = false; trayMenuHsiAlgorithmStandard.Checked = false; switch (algorithm) { case HsiAlgorithm.Geometry: trayMenuHsiAlgorithmGeometry.Checked = true; break; case HsiAlgorithm.Axis: trayMenuHsiAlgorithmAxis.Checked = true; break; case HsiAlgorithm.Segment: trayMenuHsiAlgorithmSegment.Checked = true; break; case HsiAlgorithm.Bajon: trayMenuHsiAlgorithmBajon.Checked = true; break; case HsiAlgorithm.Standard: trayMenuHsiAlgorithmStandard.Checked = true; break; default: throw new ArgumentOutOfRangeException("algorithm", algorithm, null); } Settings.Main.HsiAlgorithm = currentHsiAlgorithm = algorithm; }
public static HSI Parse(Color color, HsiAlgorithm algorithm) { // 算法参考: http://blog.csdn.net/yangleo1987/article/details/53171623 var hsi = new HSI(); var r = color.R / 255f; var g = color.G / 255f; var b = color.B / 255f; var min = Math.Min(r, Math.Min(g, b)); var max = Math.Max(r, Math.Max(g, b)); switch (algorithm) { case HsiAlgorithm.Geometry: GeometryParse(hsi, r, g, b, max, min); break; case HsiAlgorithm.Axis: AxisParse(hsi, r, g, b, max, min); break; case HsiAlgorithm.Segment: SegmentParse(hsi, r, g, b, max, min); break; case HsiAlgorithm.Bajon: BajonParse(hsi, r, g, b, max, min); break; case HsiAlgorithm.Standard: StandardParse(hsi, r, g, b, max, min); break; default: throw new ArgumentOutOfRangeException("algorithm", algorithm, null); } if (double.IsNaN(hsi.H)) { hsi.H = 0; } if (double.IsNaN(hsi.S)) { hsi.S = 0; } if (double.IsNaN(hsi.I)) { hsi.I = 0; } return(hsi); }