Я пытаюсь преобразовать значение RGB32 в HSL, потому что хочу использовать компонент Hue.
Я использовал несколько примеров, которые я нашел в Интернете для создания этого класса:
    public class HSLColor
    {
        public Double Hue;
        public Double Saturation;
        public Double Luminosity;
        public HSLColor(Double H, Double S, Double L)
        {
            Hue = H;
            Saturation = S;
            Luminosity = L;
        }
        public static HSLColor FromRGB(Color Clr)
        {
            return FromRGB(Clr.R, Clr.G, Clr.B);
        }
        public static HSLColor FromRGB(Byte R, Byte G, Byte B)
        {
            Double _R = (R / 255d);
            Double _G = (G / 255d);
            Double _B = (B / 255d);
            Double _Min = Math.Min(Math.Min(_R, _G), _B);
            Double _Max = Math.Max(Math.Max(_R, _G), _B);
            Double _Delta = _Max - _Min;
            Double H = 0;
            Double S = 0;
            Double L = (float)((_Max + _Min) / 2.0f);
            if (_Delta != 0)
            {
                if (L < 0.5d)
                {
                    S = (float)(_Delta / (_Max + _Min));
                }
                else
                {
                    S = (float)(_Delta / (2.0f - _Max - _Min));
                }
                if (_R == _Max)
                {
                    H = (_G - _B) / _Delta;
                }
                else if (_G == _Max)
                {
                    H = 2f + (_B - _R) / _Delta;
                }
                else if (_B == _Max)
                {
                    H = 4f + (_R - _G) / _Delta;
                }
            }
            //Convert to degrees
            H = H * 60d;
            if (H < 0) H += 360;
            //Convert to percent
            S *= 100d;
            L *= 100d;
            return new HSLColor(H, S, L);
        }
        private Double Hue_2_RGB(Double v1, Double v2, Double vH)
        {
            if (vH < 0) vH += 1;
            if (vH > 1) vH -= 1;
            if ((6.0d * vH) < 1) return (v1 + (v2 - v1) * 6 * vH);
            if ((2.0d * vH) < 1) return (v2);
            if ((3.0d * vH) < 2) return (v1 + (v2 - v1) * ((2.0d / 3.0d) - vH) * 6.0d);
            return (v1);
        }
        public Color ToRGB()
        {
            Color Clr = new Color();
            Double var_1, var_2;
            if (Saturation == 0)
            {
                Clr.R = (Byte)(Luminosity * 255);
                Clr.G = (Byte)(Luminosity * 255);
                Clr.B = (Byte)(Luminosity * 255);
            }
            else
            {
                if (Luminosity < 0.5) var_2 = Luminosity * (1 + Saturation);
                else var_2 = (Luminosity + Saturation) - (Saturation * Luminosity);
                var_1 = 2 * Luminosity - var_2;
                Clr.R = (Byte)(255 * Hue_2_RGB(var_1, var_2, Hue + (1 / 3)));
                Clr.G = (Byte)(255 * Hue_2_RGB(var_1, var_2, Hue));
                Clr.B = (Byte)(255 * Hue_2_RGB(var_1, var_2, Hue - (1 / 3)));
            }
            return Clr;
        }
    }
Однако он работает некорректно,
Если я использую цвет ввода (R 0, G 255, B 193), например:
Я получаю Hue = 0
в то время как в фотошопе, если я выберу те же самые значения RGB, я получаю:
 Hue = 165
который является правильным значением.
Я хочу, чтобы значение Hue было значением от 0 до 360 или от 0 до 240
В чем проблема?..
Ссылка: EasyRGB RGB- > HSL
