2011-01-11 12 views
7

Mam grupę kolorów i chcę znaleźć ich względną colorfulness. Czy ktoś może pokazać mi przykład w javascript? Wielkie dzięki!Wybierając najbardziej kolorowy kolor w javascript

+0

Wiesz równanie barwność oparciu o R, G, B o wartości koloru? –

+0

Założę się, że równanie dla barwności jest podobne do x = min (R, G, B); barwność = (R - x + G - x + B - x)/2,0. Ale do czego przydatna jest kolorystyka? Widzę nasycenie lub chromos. – TamusJRoyce

+0

@ Šime, Czy odpowiadasz na wszystkie pytania z pytaniem? @Tamus, dzięki, spróbuję. Kolorowość jest przydatna, jeśli chcesz uniknąć szarych kolorów na palecie. – MachineElf

Odpowiedz

2

// Można porównać kolory i ich nasycenie 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

Fantastyczne! połączenie zarówno jasności, jak i nasycenia było tym, czego szukałem. Wielkie dzięki – MachineElf

1

Funkcja ta zwraca nasycenia (od 0.0 do 1.0) podane wartości 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); 
    } 
} 

wiem, że poprosił o barwność, ale może to być dobry punkt stwierdzając. (I rzeczywiście nie znał różnicę, dzięki za wskazanie, że strona wikipedia)

+0

Zapomniałeś zadeklarować 's'' –

+1

Również nie potrzebujesz tego, jeśli instrukcja. Jeśli delta wynosi zero, wówczas delta/maxVal będzie równa zero. –

+0

To powinno być w porządku: 'var max = ...; var min = ...; return (max - min)/max; ' –

Powiązane problemy