Saltar al contenido

Generar degradado de color en C#

Luego de mucho batallar ya dimos con el arreglo de este dilema que muchos usuarios de esta web han presentado. Si deseas aportar algo puedes dejar tu conocimiento.

Solución:

Deberá extraer los componentes R, G, B y realizar la misma interpolación lineal en cada uno de ellos individualmente, luego recombinarlos.

int rMax = Color.Chocolate.R;
int rMin = Color.Blue.R;
// ... and for B, G
var colorList = new List();
for(int i=0; i

La respuesta de Oliver estuvo muy cerca... pero en mi caso, algunos de mis números de paso tenían que ser negativos. Al convertir los valores paso a paso en un Color La estructura de mis valores iba de negativa a los valores más altos, por ejemplo, -1 se convierte en algo así como 254. Configuré mis valores de paso individualmente para solucionar esto.

public static IEnumerable GetGradients(Color start, Color end, int steps)

    int stepA = ((end.A - start.A) / (steps - 1));
    int stepR = ((end.R - start.R) / (steps - 1));
    int stepG = ((end.G - start.G) / (steps - 1));
    int stepB = ((end.B - start.B) / (steps - 1));

    for (int i = 0; i < steps; i++)
    
        yield return Color.FromArgb(start.A + (stepA * i),
                                    start.R + (stepR * i),
                                    start.G + (stepG * i),
                                    start.B + (stepB * i));
    

Tal vez esta función pueda ayudar:

public IEnumerable GetGradients(Color start, Color end, int steps)

    Color stepper = Color.FromArgb((byte)((end.A - start.A) / (steps - 1)),
                                   (byte)((end.R - start.R) / (steps - 1)),
                                   (byte)((end.G - start.G) / (steps - 1)),
                                   (byte)((end.B - start.B) / (steps - 1)));

    for (int i = 0; i < steps; i++)
    
        yield return Color.FromArgb(start.A + (stepper.A * i),
                                    start.R + (stepper.R * i),
                                    start.G + (stepper.G * i),
                                    start.B + (stepper.B * i));
    

Puedes añadir valor a nuestra información colaborando tu veteranía en las crónicas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *