Пример #1
0
        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;
        }
Пример #2
0
        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);
        }