Пример #1
0
        internal void UpdateHSL(HSLStruct @struct)
        {
            this.H_.Text = (Math.Round(@struct.hue, 1) * 360).ToString().Truncate(3);
            var sat = Math.Round(@struct.saturation / 1, 3) * 100;
            var lg  = Math.Round(@struct.lightness / 1, 3) * 100;

            if (sat == 100)
            {
                this.S_.Text = sat.ToString().Truncate(3) + "%";
            }
            else if (sat > 9 & sat < 100)
            {
                this.S_.Text = sat.ToString().Truncate(2) + "%";
                return;
            }
            else
            {
                this.S_.Text = sat.ToString().Truncate(1) + "%";
                return;
            }
            if (lg == 100)
            {
                this.L_.Text = lg.ToString().Truncate(3) + "%";
            }
            else if (lg > 9 & lg < 100)
            {
                this.L_.Text = lg.ToString().Truncate(2) + "%";
                return;
            }
            else
            {
                this.L_.Text = lg.ToString().Truncate(1) + "%";
                return;
            }
        }
Пример #2
0
        /// <summary>
        /// Convert a <see cref="HSLStruct"/> to <see cref="Helpers.RGBStruct"/>
        /// </summary>
        /// <param name="HSL">the <see cref="HSLStruct"/> to convert</param>
        /// <returns>a <see cref="Helpers.RGBStruct"/> converted</returns>
        public static Helpers.RGBStruct ToRGB(this HSLStruct HSL)
        {
            double h  = HSL.hue;
            double sl = HSL.saturation;
            double l  = HSL.lightness;
            double v;
            double r, g, b;

            r = l;       // default to gray

            g = l;

            b = l;

            v = (l <= 0.5) ? (l * (1.0 + sl)) : (l + sl - l * sl);

            if (v > 0)
            {
                double m;
                double sv;
                int    sextant;
                double fract, vsf, mid1, mid2;

                m       = l + l - v;
                sv      = (v - m) / v;
                h      *= 6.0;
                sextant = (int)h;
                fract   = h - sextant;
                vsf     = v * sv * fract;
                mid1    = m + vsf;
                mid2    = v - vsf;

                switch (sextant)
                {
                case 0:
                    r = v;
                    g = mid1;
                    b = m;
                    break;

                case 1:
                    r = mid2;
                    g = v;
                    b = m;
                    break;

                case 2:
                    r = m;
                    g = v;
                    b = mid1;
                    break;

                case 3:
                    r = m;
                    g = mid2;
                    b = v;
                    break;

                case 4:
                    r = mid1;
                    g = m;
                    b = v;
                    break;

                case 5:
                    r = v;
                    g = m;
                    b = mid2;
                    break;
                }
            }


            byte rr = Convert.ToByte(r * 255.0f);
            byte gg = Convert.ToByte(g * 255.0f);
            byte bb = Convert.ToByte(b * 255.0f);

            return(new Helpers.RGBStruct(new Color(255, rr, gg, bb)));
        }