Pregunta

Mi objetivo con este algoritmo en el que estoy trabajando es generar una progresión de color a partir de algunos colores proporcionados.Por progresión de color me refiero a crear el efecto de "desvanecimiento" entre dos colores (color A, color B) y almacenar cada valor de color (tupla (R,G,B)) intermedio.

Por ejemplo, si lo que se proporciona es total black A = (0,0,0) y blanco total B = (255,255,255) la progresión resultante sería:

P = ((0,0,0),(1,1,1),(2,2,2), .... ,(253,253,253),(254,254,254),(255,255,255)

De modo que al principio nos sale blanco y progresivamente se va poniendo negro.Por supuesto, es muy fácil con blanco y negro (simplemente aumente el RGB en uno en cada paso 255 veces).Pero, ¿qué pasa si quiero hacer este procedimiento con dos colores arbitrarios, como A = (180,69,1) y B = (233,153,0)?

NOTA IMPORTANTE:Si con hexadecimal (o cualquier otro tipo de notación de color) fuera más fácil de lograr, también podría trabajar con eso, solo especifique qué tipo es (tenga en cuenta que estoy trabajando en PIL (Python Imaging Library), así que si es compatible con eso estoy bien)

Evidentemente tiene que ser una distribución lo más pareja posible, la progresión debe ser homogénea.

Necesito descubrir este algoritmo para poder usarlo en mi Generador Fractal (Mandelbrot Set, búscalo en Google si quieres), por lo que es importante que la progresión sea lo más suave posible, sin contratiempos.

Gracias de antemano.

¿Fue útil?

Solución

Convierta sus coordenadas RGB a HSL o HSV y recorralas, convirtiéndolas nuevamente a RGB a lo largo del camino.

Otros consejos

Simplemente interpolaría los valores RGB de forma independiente.Mira esto hilo.

Recomiendo la misma pregunta que Jim Clay pero leyendo desde la parte superior.o ver Wikipedia sobre interpolación.

Mi respuesta a la pregunta SO titulada Valores de rango a pseudocolor podría resultarle útil porque muestra una forma de generar un degradado de color específico (el nombre común de lo que usted denomina progresión de color).

Generalmente, puede interpolar entre dos colores cualesquiera en cualquier espacio de color calculando la diferencia, o valor delta, entre los componentes de cada color y luego dividiéndolos por el número de pasos intermedios deseados para obtener una cantidad delta fraccional por componente para aplicar después de cada uno. paso.

Luego, a partir del valor de cada uno de los componentes del primer color, se puede agregar la cantidad fraccionaria correspondiente una y otra vez para determinar cada color del paso intermedio.Alternativamente, el error aritmético inherente a ese enfoque se puede reducir sumando (step_number/total_steps) * fractional_delta a los valores de los componentes de color iniciales del color inicial.

Creo que esto es lo que @Jim Clay también dice en su respuesta.Si desea algún código de muestra, dígalo en un comentario.

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