Beispiel #1
0
        public static Color AdjustHSL(this Color c, int h, int s, int l, bool colorize = false)
        {
            var   cc = (ColorRGB)c;
            float hh = cc.H * 360, ss = cc.S * 100, ll = cc.L * 100;

            if (colorize)
            {
                hh = h;
            }
            else
            {
                hh += h;
            }
            ss += s;
            ll += l;
            var hhh = clip((int)hh, 360, 0);
            var sss = clip((int)ss, 100, 0);
            var lll = clip((int)ll, 100, 0);
            var rgb = ColorRGB.FromHSLA(hhh / 360.0, sss / 100.0, lll / 100.0, c.A);

            return(rgb);
        }
Beispiel #2
0
        // Given H,S,L,A in range of 0-1
        // Returns a Color (RGB struct) in range of 0-255
        public static ColorRGB FromHSLA(double H, double S, double L, double A)
        {
            double v;
            double r, g, b;

            if (A > 1.0)
            {
                A = 1.0;
            }

            r = L;               // default to gray
            g = L;
            b = L;
            v = (L <= 0.5) ? (L * (1.0 + S)) : (L + S - L * S);
            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;
                }
            }
            ColorRGB rgb = new ColorRGB();

            rgb.R = Convert.ToByte(r * 255.0f);
            rgb.G = Convert.ToByte(g * 255.0f);
            rgb.B = Convert.ToByte(b * 255.0f);
            rgb.A = Convert.ToByte(A * 255.0f);
            return(rgb);
        }