none
Dado un color, Como Generar una escala gradiente de colores. RRS feed

  • Pregunta

  • En un mapa tengo varios objetos que tengo que colorear.
    Para rellenar los colores de un mapa
    necesito obtener computacionalmente los colores
    de una gradiente entre un color dado y el blanco.

    Por ejemplo, para el color verde, necesito 10 colores:
    hago 255/10=25

    int cant = 10;             
    String[] colores = new String[cant];
    int valor = 0;
    for (int i = 0;i < cant; i++)
    {
        valor += (255/cant);
        colores[i] = "#FF00" + valor.ToString("X") + "00";
    }

    El problema es cuando me dan un color compuesto:
    como ser

    #ff9900 Naranja
    #9900cc Violeta
    #00ccff Celeste
    #808000 Oliva
    #441111 Marron

    Alguien sabe como puedo generalos ?
    martes, 14 de mayo de 2013 23:55

Todas las respuestas

  • Bueno, de tanto buscar encontre una forma y la publico por si le sirve a alguien:

    static class Program
        {
            [STAThread]
            static void Main()
            {
                Form form = new Form();
                Color start = Color.Red;//Khaki;
    			int cant = 5;
    			Color[] paleta = MakeColorGradient(start, cant);
    			
                for (int i = 0; i < cant; i++)
                {               
                    Button button = new Button();
                    button.Dock = DockStyle.Top;
                    button.BackColor = paleta[i];
    				//button.BackColor = System.Drawing.ColorTranslator.FromHtml(paleta[i]);
    				//button.BackColor = ColorConverter.ConvertFromString(paleta[i]) as Color;								
    				button.Text = button.BackColor.ToString();//button.Text = paleta[i].ToString();
                    form.Controls.Add(button);				
                    button.BringToFront();
                }
    
                Application.Run(form);
            }
    		static Color[] MakeColorGradient(Color start, int cant)
    		{	//System.Drawing.Color //System.Windows.Media.Color
    			Color[]  colores = new Color[cant] ;			
    			Color end = Color.White;//Khaki;
    			for (int i = 0;i < cant; i++)
    			{
    				int r = Interpolate(start.R, end.R, cant, i),
    					g = Interpolate(start.G, end.G, cant, i),
                        b = Interpolate(start.B, end.B, cant, i);					
    				colores[i] = System.Drawing.Color.FromArgb(r,g,b);				
    			}
    			return colores;
    		}
    		
            static int Interpolate(int start, int end, int steps, int index)
            {
                float s = start, e = end, final = s + (((e - s) / steps) * index);
                return (int)final;
            }
        }

    miércoles, 15 de mayo de 2013 13:45