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ę.