Pregunta

Estoy tratando de generar el gradiente de color a continuación (el color es azul en un extremo y rojo en el otro).

alt text
(fuente: Brothersoft.com)

Sigo la sugerencia aparecer aquí. Este es mi código:

int rMax = Color.Red.R;
int rMin = Color.Blue.R;
// ... and for B, G
var colorList = new List<Color>();
for(int i=0; i<size; i++)
{
    var rAverage = rMin + (int)((rMax - rMin) * i / size);
    // ... and for B, G
    colorList.Add(Color.FromArgb(rAverage, gAverage, bAverage));
}

Aunque el resultado yo hizo Muestre una transición gradual y suave de rojo a azul, pero otro color intermedio, como el amarillo y el verde, no apareció en absoluto.

¿Algo que hice mal?

¿Fue útil?

Solución

Debe trabajar con colores en el espacio de color HSL, no RGB. Eso le permite cambiar suavemente el valor del tono de 0 (rojo) a 1 (violeta). La estructura System.Drawing.Color permite convertir de RBG a HSL (Gethue, etc.) pero no en el otro lado. Las matemáticas son aunque simple.

Otros consejos

int rMax = Color.Red.R; 
int rMin = Color.Blue.R; 
// ... and for B, G 
var colorList = new List<Color>(); 
for(int i=0; i<size; i++) 
{ 
    var rAverage = rMin + (int)((rMax - rMin) * i / size); 
    // ... and for B, G 
    colorList.Add(Color.FromArgb(rAverage, gAverage, bAverage)); 
} 

Te estás configurando rMin = 0 y rMax = 255. Por lo tanto, estás configurando esencialmente

rAverage = 255 * i / size;

No tienes el código para gAverage y bAverage Listado, pero si fuera realmente equivalente, verías una trasición gradual de Black-> Gray-> White, sin otros tonos en absoluto.

Parece probable que lo que desea es iterar sobre los diferentes tonos a una ligereza/saturación constante. Ver aquí para una clase C# de ejemplo que hace eso y aquí Para una explicación de la ecuación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top