Foros del Web » Programando para Internet » Javascript »

degradador de colores

Estas en el tema de degradador de colores en el foro de Javascript en Foros del Web. Intento hacer un degradador de colores como vi en http://www.meyerweb.com/eric/tools/color-blend/. Bueno no asi, pero necesito la esencia. Es decir, a una funcion de javascript pasarle ...
  #1 (permalink)  
Antiguo 22/05/2004, 10:43
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años, 2 meses
Puntos: 45
Pregunta degradador de colores

Intento hacer un degradador de colores como vi en http://www.meyerweb.com/eric/tools/color-blend/. Bueno no asi, pero necesito la esencia. Es decir, a una funcion de javascript pasarle color1, color2, el pasoActual y el pasosTotales, de manera que devuelva un valor #rrggbb.

Me explico un poco mejor. La tarea de la function javascript es degradar de un color a otro, pero no hacer la media entre los dos, sino hacer el % de mezcla que yo le indique (pasoActual/pasosTotales), de esta manera poder pasar por ejemplo del rojo al azul en 10 pasos o en 100, llamando a la funcion respectivas veces. Todo lo que he intentado han salido chapuzas, y me estoy volviendo loco . Asi que pido un poco de ayuda, no digo que me lo construyan (aunque si alguien se atreve... ). Las funciones en que me fundamento las saque de estos foros, consisten en poder pasar de un valor #rrggbb en hexadecimales a un r,g,b en valores numericos de 0 a 255 para poder trabajar bien con ellos. Las funciones son:


Código PHP:
var _h0"0123456789abcdef";
var 
_h _h0.split("");
function 
rrggbb(r,g,b) {
    
r=_h[parseInt(16)] + _h[16];
    
g=_h[parseInt(16)] + _h[16];;
    
b=_h[parseInt(16)] + _h[16];;
    return 
"#"+r+g+b;
}
function 
rgb(rrggbb) {
    
valor=0colores=[rrggbb.substring(1,3),rrggbb.substring(3,5),rrggbb.substring(5,7)];
    for(
a=0;a<colores.length;a++) {
        
colores[a]=colores[a].split("");
        
colores[a]=(_h0.indexOf(colores[a][0])*16) + (_h0.indexOf(colores[a][1]));
    }
    return [ 
colores[0] , colores[1] , colores[2] ];

Lo mas cerca que he estado ha sido aqui:

Código PHP:
function mezclarColores(col1,col2,paso,pasos) {
    
col1=rgb(col1); r1=col1[0]; g1=col1[1]; b1=col1[2];
    
col2=rgb(col2); r2=col2[0]; g2=col2[1]; b2=col2[2];
    
r= ((Math.max(r1,r2)-Math.min(r1,r2)) *paso/pasos ) +Math.min(r1,r2); r=parseInt(r);
    
g= ((Math.max(g1,g2)-Math.min(g1,g2)) *paso/pasos ) +Math.min(g1,g2); g=parseInt(g);
    
b= ((Math.max(b1,b2)-Math.min(b1,b2)) *paso/pasos ) +Math.min(b1,b2); b=parseInt(b);
    return 
rrggbb(r,g,b);

Aun asi no funciona bien, porque si le aplicamos este ejemplo:

Código PHP:
c1="#ffffff";
c2="#00ff00";
pasos=10;
for(
bucle=0;bucle<=pasos;bucle++) {
    
colActual=mezclarColores(c1,c2,bucle,pasos);
    
document.write("<font color='"+colActual+"'>Mezclando en pulso "+bucle+". Actual="+colActual+"</font><br>");

mezclara desde el verde al blanco, y no del blanco al verde, que es como lo quiero. Ademas el problema es que no se porqué. Creo que tiene que ver con los maximos y minimos de la funcion mezclarColores, pero no se que poner si quito eso...



Una sugerencia por favor..
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:56.