Как проверить яркость цвета фона, чтобы определить цвет текста, написанного на нем - PullRequest
0 голосов
/ 25 января 2020

У меня простой вопрос, но я не смог найти ответ на этот вопрос. Обратите внимание, что я почти начинающий.

Итак, у меня есть приложение (оно не мое, но я помогаю ему), и там написано на цветном фоне, который можно изменить. пользователем. Письмо должно выглядеть черным, если фон достаточно яркий, но оставаться белым, если это не так.

Приложение представляет собой приложение для школьных дневников для учащихся начальной и средней школы, которое подключается к общегосударственной службе школьных дневников. в Венгрии. Здесь лучшее примечание - 5, худшее - 1. Пользователь может установить цвета каждого класса в настройках. Прямо сейчас только код для заметки "4" жестко закодирован, чтобы иметь черный текст (поскольку фон для заметок "4" по умолчанию желтый), все остальные имеют белый цвет. Это то, что я хочу автоматизировать.

Пример белого текста

Пример черного текста

Это это основной экран приложения для справки

Страница, где пользователь может изменить цвет для заметки типа

Код прямо сейчас:

switch (evaluation.NumberValue) {
    case 1:
      bColor = globals.color1;
      fColor = Colors.white;
      break;
    case 2:
      bColor = globals.color2;
      fColor = Colors.white;
      break;
    case 3:
      bColor = globals.color3;
      fColor = Colors.white;
      break;
    case 4:
      bColor = globals.color4;
      fColor = Colors.black; //This should be white if color4 is dark enough. Same applies to all of them.
      break;
    case 5: //I'm looking for something like this:
      bColor = globals.color5;
      fColor = (lightLevel(globals.color5) > 50) ? Colors.black : Colors.white;
      break;
    default:
      bColor = Colors.black;
      fColor = Colors.white;
      break;
  }

Я ищу что-то вроде этого:

 case 5: //I'm looking for something like this:
  bColor = globals.color5;
  fColor = (lightLevel(globals.color5) > 50) ? Colors.black : Colors.white;
  break;

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 25 января 2020

Я могу предложить 2 варианта:

  1. Brightness.estimateBrightnessForColor метод, например
Color calculateTextColor(Color background) {
  return Brightness.estimateBrightnessForColor(background) == Brightness.light ? Colors.black : Colors.white;
}

Color.computeLuminance метод, например
Color calculateTextColor(Color background) {
  return background.computeLuminance() >= 0.5 ? Colors.black : Colors.white;
}

Хотя последний описывается как computationally expensive to calculate.

Пожалуйста, дайте мне знать, если это помогло.

...