woman the lyrics lee arms amos acoustic colors fade

lee - colors in the face lyrics



Calcular un desvanecimiento de color (7)

La pregunta es ¿qué transformación quieres que ocurra? Si transpone en el espacio de color HSV y se le da

FF0000 y 00FF00

Pasará de rojo a amarillo a verde.

Sin embargo, si define "negro" o algún otro tono como el punto medio de la mezcla, debe sombrear ese color primero ff0000-> 000000-> 00ff00 o vía blanco: ff0000 -> ffffff -> 00ff00.

Sin embargo, la transformación a través de HSV puede ser divertida porque tienes que usar un poco de trig para mapear el mapa circular en los componentes del vector.

Dados dos colores yn pasos, ¿cómo se pueden calcular n colores, incluidos los dos colores dados que crean un efecto de fundido?

Si es posible, se prefiere el pseudocódigo, pero probablemente se implementará en Java.

¡Gracias!


Lo más fácil es la interpolación lineal entre los componentes de color (ver la respuesta de nickf). Solo tenga en cuenta que el ojo es altamente no lineal, por lo que no necesariamente se verá si está dando pasos. Algunos espacios de color intentan abordar esto (¿CIE quizás?), Por lo que es posible que desee transformarse primero en otro espacio de color, interpolar y luego volver a transformarlo en RGB o lo que sea que esté utilizando.


Si desea una combinación que se parece a la mayoría de los widgets GUI del selector de color, realmente desea traducir a HSL o HSV. A partir de ahí, probablemente estés bien con la interpolación lineal en cada dimensión.

Intentar hacer interpolaciones directamente en el espacio de color RGB es una mala idea. Es demasiado no lineal (y no, la corrección gamma no ayudará en este caso).


Divida cada color en sus componentes RGB y luego calcule los pasos individuales requeridos.

oldRed = 120; newRed = 200; steps = 10; redStepAmount = (newRed - oldRed) / steps; currentRed = oldRed; for (i = 0; i < steps; i++) { currentRed += redStepAmount; }

Obviamente extender eso para verde y azul.


Para aquellos que buscan algo que pueden copiar y pegar. Hizo una función rápida para colores RGB. Devuelve un único color que es la cantidad de ratio más cercana a rgbColor2 .

function fadeToColor(rgbColor1, rgbColor2, ratio) { var color1 = rgbColor1.substring(4, rgbColor1.length - 1).split('',''), color2 = rgbColor2.substring(4, rgbColor2.length - 1).split('',''), difference, newColor = []; for (var i = 0; i < color1.length; i++) { difference = color2[i] - color1[i]; newColor.push(Math.floor(parseInt(color1[i], 10) + difference * ratio)); } return ''rgb('' + newColor + '')''; }


¿Qué tal esta respuesta?

- (UIColor *)colorFromColor:(UIColor *)fromColor toColor:(UIColor *)toColor percent:(float)percent { float dec = percent / 100.f; CGFloat fRed, fBlue, fGreen, fAlpha; CGFloat tRed, tBlue, tGreen, tAlpha; CGFloat red, green, blue, alpha; if(CGColorGetNumberOfComponents(fromColor.CGColor) == 2) { [fromColor getWhite:&fRed alpha:&fAlpha]; fGreen = fRed; fBlue = fRed; } else { [fromColor getRed:&fRed green:&fGreen blue:&fBlue alpha:&fAlpha]; } if(CGColorGetNumberOfComponents(toColor.CGColor) == 2) { [toColor getWhite:&tRed alpha:&tAlpha]; tGreen = tRed; tBlue = tRed; } else { [toColor getRed:&tRed green:&tGreen blue:&tBlue alpha:&tAlpha]; } red = (dec * (tRed - fRed)) + fRed; green = (dec * (tGreen - fGreen)) + fGreen; blue = (dec * (tBlue - fBlue)) + fBlue; alpha = (dec * (tAlpha - fAlpha)) + fAlpha; return [UIColor colorWithRed:red green:green blue:blue alpha:alpha]; }