Pregunta

Vamos a considerar el siguiente escenario:. Una función que puede generar código de colores de blanco a rojo, de blanco a azul, de blanco a rosado, de blanco a naranja, etc.

El código de colores es en formato RGB con valores de 0 a 255.

¿Alguna idea? ¿Me puede dar el pseudocódigo o vincularse a tales algoritmo?

¿Fue útil?

Solución

Parece que usted está después de interpolación lineal - en su caso, de blanco a interpolar el color especificado. Por ejemplo, en C #:

public IEnumerable<Color> Interpolate(Color from, Color to, int steps)
{
    int range = steps-1; // Makes things a bit easier
    for (int i=0; i < steps; i++)
    {
        // i is the proportion of the "to" colour to use.
        // j is the proportion of the "from" colour to use.

        int j = range - i;
        int r = ((from.R * j) + (to.R * i)) / range;
        int g = ((from.G * j) + (to.G * i)) / range;
        int b = ((from.B * j) + (to.B * i)) / range;
        yield return new Color(r, g, b);
    }
}

Por supuesto que hay otras maneras de hacerlo, además de una interpolación lineal, pero es probable que sea el más sencillo. Tenga en cuenta que esto se complica si usted tiene una gran cantidad de pasos o valores más grandes, porque hay que considerar la posibilidad de desbordamiento. En este caso, debe estar bien aunque -. Es poco probable que desee más de 256 pasos, y el valor máximo es de 255, por lo que no obtendrá cerca de los límites de ints

EDIT: Como se señaló en los comentarios, así RGB puede no ser la mejor dominio en el que al utilizar la interpolación lineal. Usted puede ser mejor fuera de la conversión de la de / a los valores RGB en HSL o HSV , y haciendo una interpolación de aquellos. Esto puede ser fácil o difícil dependiendo de la plataforma. El enlace de Wikipedia en la frase anterior da fórmulas para los cálculos apropiados si no se proporcionan para usted.

Otros consejos

Algoritmo:

  1. Encuentre el valor RGB para blanco
  2. Encuentre el valor RGB para el otro color (por ejemplo, se menciona rojo, azul, rosa, naranja)
  3. valores Calcular RGB cuyos componentes RGB son aritméticamente entre los componentes RGB de dos extremos

Por ejemplo, si un extremo es (0,0,0) y el otro extremo es (0,255,255), entonces el valor medio camino entre estos dos colores es (0128128) ... y el valor que es un cuarto de la camino entre estos dos valores es (0,64,64).

La interpolación de colores a través de puntos específicos conocidos, se utiliza a menudo para la construcción de esquemas de color para la representación gráfica de los datos. Una alternativa a una fórmula de interpolación explícita es elegir un esquema de color que tiene algún diseño detrás de su representación. Una buena fuente de tal esquema es ColorBrewer .

Incluso si usted necesita para interpolar, a partir de una combinación de colores bien diseñado podría producir resultados mucho más usables.

Comience con los dos colores que desee gradientes entre, y dividirlos en R, G y B partes.

Decidir el número de "pasos" desea hacer desaparecer a través.

Divida la diferencia entre las partes R, G y B con el número de pasos. Ahora tiene una "diferencia de paso" para cada color.

Loop través de cada paso y añadir la diferencia de paso para el valor de color una vez para cada iteración. Ronda de los números enteros del última que haces.

¿Qué colores que desea cambiar a? blanco a rojo no sería más que un caso de partir de 255 255 255 y decrementar los dos segundos hasta que tenga 255 0 0. azul sería mantener el último valor y disminuyendo a terminar con 0 0 255, etc.

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