Как определить более темный или более светлый вариант цвета данного цвета? - PullRequest
41 голосов
/ 19 сентября 2008

Учитывая исходный цвет любого оттенка системой или пользователем, я бы хотел простой алгоритм, который я мог бы использовать для разработки более светлых или более темных вариантов выбранного цвета. Аналогичен эффектам, используемым в Windows Live Messenger для стилизации пользовательского интерфейса.

Язык - C # с .net 3.5.

Ответ на комментарий: Цветовой формат (Альфа) RGB. Со значениями в байтах или числах с плавающей запятой.

Отмечая ответ: Для контекста моего использования (несколько простых эффектов пользовательского интерфейса) ответ, который я отмечаю как принятый, на самом деле является наиболее простым для этого контекста. Однако я также отдал голоса за более сложные и точные ответы. Любой, кто выполняет более сложные операции с цветом и найдет эту нить в будущем, обязательно должен это проверить. Спасибо ТАК. :)

Ответы [ 13 ]

0 голосов
/ 19 сентября 2008

Любые вариации цвета лучше сделать в HSL / HSV.

Хорошим тестом является интерполяция между двумя эквивалентными значениями в пространстве RGB и пространстве HSL. Пандус в пространстве HSL выглядит как естественная прогрессия. В пространстве RGB это выглядит довольно неестественно. HSL гораздо лучше отображает наше визуальное восприятие цветового пространства, чем RGB.

0 голосов
/ 19 сентября 2008

Если ваши цвета в формате RGB (или, предположительно, CMYK), вы можете использовать довольно грубый метод увеличения значения каждого компонента цвета. Например, в HTML цвета представлены в виде трех двузначных шестнадцатеричных чисел. # ff0000 даст вам ярко-красный цвет, который затем можно затемнить, увеличив значения компонент G и B на одинаковую величину, например # ff5555 (дает более светлый красный цвет). Предположительно для цветов Hue, Saturation и Lightness (HSL), вы можете просто поднять компонент L, но я не могу сказать наверняка; Я менее знаком с этим цветовым пространством.

Как я уже сказал, этот метод довольно грубый. По моим воспоминаниям о Live Messenger кажется, что вы пытаетесь создавать градиенты, которые очень легко можно применить в Windows Presentation Foundation (WPF, часть .NET 3.0). WPF поддерживает множество различных типов градиентных кистей, включая линейные и радиальные градиенты.

Я настоятельно рекомендую книгу Адама Натана Windows Presentation Foundation Unleashed как хорошее и подробное введение в WPF.

НТН

0 голосов
/ 19 сентября 2008

Если вы получите цвет как RGB, сначала преобразуйте его в цветовое пространство HSV (оттенок, насыщенность, значение). Затем увеличьте / уменьшите значение, чтобы получить более светлый / более темный оттенок цвета. Затем конвертируйте обратно в RGB.

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