Exemplo n.º 1
0
        public static Color getRandomColor() // obtengo un color aleatorio
        {
            /*
             * obtengo el color en hsl, para ayudarme un poco de que el color que se selecciona sea atractivo y no se vea feo
             * el algoritmo elige primero un valor para h de 0 a 360, despues para s de 35 a 100, y por ultimo de l de 20 a 85
             * lo hago entre esos rangos porque esos son los rangos en los cuales la saturacion del color es adeccuada y el color
             * no se encuentra en la escala de grises o es muy laro o muy oscuro con esos valores de luminosidad
             * voy cambiando la semila de generacion de los valores con respecto al primer valor para que haya mas aleatoriedad
             * pero no tanta y que el color no sea bonito, pero de esto ultimo la verdad no estoy muy segura, puede mejorar.
             */
            int    h;
            byte   s, l;
            Random rnd = new Random();

            h   = rnd.Next(360);
            rnd = new Random(h * 10);
            s   = (byte)rnd.Next(35, 100);
            rnd = new Random(h * 5);
            l   = (byte)rnd.Next(20, 85);
            HSL   hsl      = HSL.FromHSL(h, s, l);
            Color rndColor = hsl.ToRgb();

            rndColor.A = 250;
            return(rndColor);
        }
Exemplo n.º 2
0
        public static HSL ToHsl(this Color color) // paso de color rgb a hsl
        {
            double double_l, double_s, double_h;
            byte   l, s;
            int    h;
            double r = color.R / 255.0;
            double g = color.G / 255.0;
            double b = color.B / 255.0;

            double max = r;

            if (max < g)
            {
                max = g;
            }
            if (max < b)
            {
                max = b;
            }

            double min = r;

            if (min > g)
            {
                min = g;
            }
            if (min > b)
            {
                min = b;
            }

            double diff = max - min;

            double_l = (max + min) / 2;
            if (Math.Abs(diff) < 0)
            {
                double_h = 0;
                double_s = 0;
            }
            else
            {
                if (double_l <= 0.5)
                {
                    double_s = diff / (max + min);
                }
                else
                {
                    double_s = diff / (2 - max - min);
                }

                double r_dist = (max - r) / diff;
                double g_dist = (max - g) / diff;
                double b_dist = (max - b) / diff;
                if (r == max)
                {
                    double_h = b_dist - g_dist;
                }
                else if (g == max)
                {
                    double_h = 2 + r_dist - b_dist;
                }
                else
                {
                    double_h = 4 + g_dist - r_dist;
                }

                double_h = double_h * 60;
                if (double_h < 0)
                {
                    double_h += 360;
                }
            }
            h = Convert.ToInt32(double_h);
            s = Convert.ToByte(double_s * 100);
            l = Convert.ToByte(double_l * 100);
            HSL hsl = HSL.FromHSL(h, s, l);

            return(hsl);
        }