2011-01-20 17 views

Odpowiedz

6

Cóż, to nie jest takie proste, ponieważ zależy od tego, jak zdecydujesz się kwantyzować kolor.

Możesz to zrobić za pośrednictwem HSB, co jest moim zdaniem lepszym rozwiązaniem (choć niekoniecznie jest to faktem) lub po prostu użyj wartości szesnastkowej.

najszybsza jest prawdopodobnie to zrobić za pomocą Hax wartości

var colour:uint = 0x9900CC; 
var r:uint = colour >> 16; 
var g:uint = colour >> 8 & 0xFF; 
var b:uint = colour & 0xFF; 

.To daje wartość każdego kanału (c) (ABC bycia kolory)

następnie do matematyki dla każdego kanał (c)

(cB - cA)/(cC - cA) 

wtedy, gdy pojawi się każdej z tych kanałach, można dodać je razem i podzielić przez 3.

jest jednak jeden problem, jeśli kolory A i C są zawsze takie same dla każdego kanału, należy dodać wyjątek (ponieważ cC i CA są zerowe i nie można dzielić przez zero), w tym momencie trzeba również aby zdecydować, jak sobie z tym poradzić.

+0

Dzięki Daniel, wszystko działało idealnie. – Andrei

+1

Zdecydowanie wypróbowałbym go również przy użyciu HSL, HSL lub jednego z innych cylindrycznych systemów kolorów. W zależności od aplikacji możesz uzyskać lepsze (lub bardziej znaczące) wyniki. – mpdonadio

+0

Wciąż zastanawiam się, jaki jest najbardziej odpowiedni sposób postępowania w przypadku, gdy dwie liczby są takie same, a liczba pomiędzy nimi jest inna, matematycznie różnica jest nieskończonością. Byłoby tak samo, nawet w przypadku HSV (HSB, HSL) – Daniel

Powiązane problemy