2011-01-11 16 views
7

Tengo un grupo de colores y quiero encontrar su pariente colorfulness. ¿Alguien podría mostrarme un ejemplo en javascript? ¡Muchas gracias!Elegir el color más colorido en javascript

+0

¿Sabe usted la ecuación de colorido basado en la R, G, B los valores del color? –

+0

Supongo que la ecuación para el colorido es algo así como x = min (R, G, B); colorido = (R - x + G - x + B - x)/2.0. Pero, ¿para qué sirve el colorido? Puedo ver Saturación o Croma. – TamusJRoyce

+0

@ Šime, ¿Responde todas las preguntas con una pregunta? @Tamus, gracias, intentaré eso. El colorido es útil si desea evitar los colores grises en una paleta. – MachineElf

Respuesta

2

// Usted puede comparar los colores por su saturación y de la luminosidad

function rgbtoHsv(rgb){ 
    var c= rgb.match(/\d+/g), 
    r= c[0]/255, g= c[1]/255, b= c[2]/255, 
    max= Math.max(r, g, b), min= Math.min(r, g, b), 
    h= 0, s= 0, v= max; 
    if(max!= min){ 
     var d= max-min; 
     s= d/max; 
     switch(max){ 
      case r: h= (g-b)/d +(g< b? 6: 0); 
      break; 
      case g: h= (b-r)/d + 2; 
      break; 
      case b: h= (r-g)/d + 4; 
      break; 
     } 
    } 
    return [Math.round(h*60), Math.round(s*100), Math.round(v*100)]; 
} 
function sortColors(a, b){ 
    var a1= rgbtoHsv(a), b1= rgbtoHsv(b); 
    return (b1[1]+b1[2])- (a1[1]+a1[2]); 
} 

var colores = [ 'rgb (255,0,0) ',' rgb (150,150,150) ',' rgb (0,200,100) ',' rgb (0,255,255) ']; // colors.sort (sortColors) .join ('\ n')

/* returned value: (most to least 'colorful') 
rgb(255,0,0) 
rgb(0,255,255) 
rgb(0,200,100) 
rgb(150,150,150) 
*/ 
+0

¡Fantástico! la combinación de brillo y saturación es lo que estaba buscando. Muchas gracias – MachineElf

1

Esta función devuelve la saturación (de 0,0 a 1,0) teniendo en cuenta los valores RGB:

function saturation(r,g,b) { 
    var minVal = Math.min(r, g, b); 
    var maxVal = Math.max(r, g, b); 
    var delta = maxVal - minVal; 
    if (maxVal === 0) { 
      return 0; 
    } else { 
      return (delta/maxVal); 
    } 
} 

Sé que pidió colorido, pero esto podría ser un buen punto de afirmar. (que en realidad no sabía la diferencia, gracias por señalar que la página Wikipedia)

+0

Olvidó declarar 's' –

+1

Además, no necesita esa declaración if. Si delta es cero, entonces delta/maxVal será cero. –

+0

Esto debería estar bien: 'var max = ...; var min = ...; return (max - min)/max; ' –

Cuestiones relacionadas