Gdy dodajemy tekst na jakimś tle, którego kolor ustawiany jest dynamicznie, mamy problem: jaki kolor tekstu? Czarny czy biały?
Aby rozwiązać ten problem, należy sprawdzić, jak jasny jest kolor tła. Problem w tym, że wpływ poszczególnych komponentów RGB na ogólną jasność jest różna, stąd trzeba ową jasność policzyć uwzględniając tę zasadę. Ja użyłem dość popularnej w internecie formuły – i spisuje się naprawdę dobrze.
/** * Find the right color of the text, depending on the color of the background. * @param aColor Color, to which we're adjusting by contrast. * @return Black or white color. */ public int getBlackOrWhite(int aColor) { int red = (aColor >> 16) & 0xFF; int green = (aColor >> 8) & 0xFF; int blue = (aColor >> 0) & 0xFF; int result = 0; if (((double)red*0.299 + (double)green*0.587 + (double)blue*0.114) > 186) result = Color.BLACK; else result = Color.WHITE; return result; }
Parametrem wejściowym jest kolor tła, wartość zwracana to kolor czarny lub biały. Formuła doboru wygląda na dobrą, bo spośród tych kolorów, które przetestowałem, wybór: czarny-biały zawsze był trafny, stąd mogę ją z czystym sumieniem polecić – co też czynię.