2009-10-02 16 views
5

Próbuję wygenerować kolor, który może podświetlić element jako "wybrany" na podstawie koloru bieżącego obiektu. Próbowałem zwiększyć niektóre z wartości HSB, ale nie mogę wymyślić uogólnionej formuły. Szczególnie mam problemy podczas pracy z bielą (jaśniejsza biel nie wygląda inaczej niż zwykła biel). Nie ma wymogu, który mówi, że muszę go rozjaśnić, więc jakiś "odwrotny" kolor również by działał dobrze. Czy są jakieś standardowe algorytmy lub techniki do robienia czegoś takiego (zgaduję, że tak, ale nie mogłem znaleźć żadnego - nie jestem pewien, czy jest na to nazwa)?Algorytm doboru kolorów

Dzięki,

Jeff

Odpowiedz

3

Może efekt négatif:

pseudo:

int red = originalColor.red 
int green = originalColor.green 
int blue = originalColor.blue 

int newRed = 255 - red 
int newGreen = 255 - green 
int newBlue = 255 - blue 

Color negativeColor = new Color(newRed, newGreen, newBlue) 

lub dodanie koloru niebieskiego-efekt:

int red = originalColor.red 
int green = originalColor.green 
int blue = originalColor.blue 

int newRed = 255 - red 
int newGreen = 255 - green 
int newBlue = 255 - blue + 100 
if newBlue > 255 { 
    newBlue = 255 
    newRed = newRed - 50 
    newGreen = newGreen - 50 
    if newRed < 0 {newRed = 0} 
    if newGreen < 0 {newGreen = 0} 
} 

Color negativeColor = new Color(newRed, newGreen, newBlue) 
+2

Zero kontrastu z (128, 128, 128) – recursive

3

jedna technika Siema Możesz użyć, aby zamienić kolor pierwszego planu (tekst) przedmiotu i jego kolor tła. Jeśli kolory tekstu i tła elementu już mają przyjemny kontrast, wybrany element powinien nadal wyglądać dobrze.

alt text http://rcartaino.wordpress.com/files/2009/10/selected-tag.png

Jest to technika stosowana na tej stronie (przepełnienie stosu), kiedy myszą znaczników w swoim poście. Zmieniają kolor z DarkBlue-on-LightBlue na LightBlue-on-DarkBlue. Spróbuj, aby zobaczyć efekt.

+0

Robert, to by działało, jednak sprawa, z którą pracuję, nie ma solidnego tła. Jest to element wykreślony na niestałym tle. –

3

Jeśli używasz HSB, spróbuj przesunąć kolor o połowę wartości maksymalnej w górę lub w dół, co powinno dać ci "przeciwny" kolor (nazywany również kolorem uzupełniającym). Nie przydaje się to jednak w przypadku szarego spektrum, które nie ma barwy i będzie wyglądać identycznie.

Jeśli zrobisz to z odcieniem i jasnością, otrzymasz rodzaj "negatywu", który działa we wszystkich przypadkach. Prawdziwym negatywem byłoby "przerzucenie" wartości jasności wokół punktu środkowego, ale to nie działa dla średnio-szarego, który nadal byłby średnio szary.

Nie zawsze jest możliwe rozjaśnienie kolorów (co robisz z bielą?), Więc zmiana koloru i jasności o połowę jest najbardziej niezawodna, jeśli szukasz kontrastu.