2011-01-11 7 views
7

Ho un gruppo di colori e voglio trovare il loro relativo colorfulness. Qualcuno potrebbe mostrarmi un esempio in javascript? Grazie molto!Scelta del colore più colorato in javascript

+0

Sai l'equazione per policromia sulla base della R, G, B i valori del colore? –

+0

Supporrei che l'equazione per il colore sia qualcosa come x = min (R, G, B); colorita = (R - x + G - x + B - x)/2.0. Ma a cosa serve la colorita? Posso vedere Saturazione o Crominanza. – TamusJRoyce

+0

@ Šime, rispondi a tutte le domande con una domanda? @ Tamus, grazie, ci proverò. La coloritura è utile se si desidera evitare i colori grigi in una tavolozza. – MachineElf

risposta

2

// permette di comparare i colori per la loro saturazione e Brightness

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 colors = [ '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

Fantastico! la combinazione di luminosità e saturazione è ciò che cercavo. Grazie molto – MachineElf

1

Questa funzione restituisce la saturazione (da 0.0 a 1.0) dati i valori 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); 
    } 
} 

So che lei ha chiesto policromia, ma questo potrebbe essere un buon punto affermando. (Io in realtà non conoscevo la differenza, grazie per aver ricordato che wikipedia pagina)

+0

Hai dimenticato di dichiarare 's' –

+1

Inoltre, non hai bisogno di quella istruzione if. Se delta è zero, quindi delta/maxVal sarà zero. –

+0

Questo dovrebbe andare bene: 'var max = ...; var min = ...; return (max - min)/max; ' –

Problemi correlati