Алгоритм выбора цвета - PullRequest
       27

Алгоритм выбора цвета

5 голосов
/ 02 октября 2009

Я пытаюсь сгенерировать цвет, который мог бы выделить элемент как «выбранный» на основе цвета текущего объекта. Я попытался увеличить некоторые значения HSB, но не могу придумать обобщенную формулу. В частности, у меня возникают проблемы при работе с белым (более яркий белый цвет не сильно отличается от обычного белого). Там нет требования, которое говорит, что мне нужно сделать его ярче, поэтому какой-то «обратный» цвет тоже будет хорошо работать. Существуют ли какие-либо стандартные алгоритмы или методы для выполнения чего-либо подобного (я предполагаю, что да, но я не смог их найти - я не уверен, есть ли для этого название)?

спасибо,

Jeff

Ответы [ 4 ]

3 голосов
/ 02 октября 2009

Одна из техник, которую вы можете использовать, - это поменять цвет переднего плана (текста) и цвет фона. Если цвета текста и фона вашего элемента уже имеют приятный контраст, выбранный элемент должен продолжать хорошо выглядеть.

alt text
(источник: wordpress.com )

Это техника, используемая на этом сайте (переполнение стека), когда вы наводите курсор мыши на теги в своем посте. Они превращаются из DarkBlue-on-LightBlue в LightBlue-on-DarkBlue. Попробуйте, чтобы увидеть эффект.

3 голосов
/ 02 октября 2009

Если вы используете HSB, попробуйте сместить оттенок на половину максимального значения вверх или вниз, что даст вам «противоположный» цвет (также называемый дополнительным цветом). Тем не менее, это не поможет вам для серого спектра, который не имеет оттенка и, следовательно, будет выглядеть идентично.

Если вы сделаете это с оттенком и яркостью, вы получите своего рода «негатив», который работает во всех случаях. Истинный минус заставил бы вас «перевернуть» значение яркости вокруг средней точки, но это не работает для среднего серого, который все равно будет средним серым.

Не всегда возможно сделать цвет ярче (что вы делаете с белым?), Поэтому смещение оттенка и яркости вдвое наиболее надежно, если вы ищете контраст.

3 голосов
/ 02 октября 2009

Может быть, отрицательный эффект:

Псевдо:

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)

Или добавление синего цветового эффекта:

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)
0 голосов
/ 02 октября 2009

Вы можете найти инструменты на http://www.easyrgb.com/, которые дадут вам несколько идей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...