HSB против HSL против HSV

Я делаю класс Color как часть очень простого графического API в С++. Поэтому я решил взглянуть на платформу Microsoft.NET и заметил, что их класс Color имеет функции для HSB.

Затем я начал исследование, чтобы определить, должен ли я предоставлять HSB, HSL или HSV или ВСЕ их в моем классе.

Итак, у меня есть 3 вопроса по HSB, HSL, HSV:

  • Является ли HSB таким же, как HSL?

  • Если нет, почему нет HSBL или даже HSBLV?

  • Я нахожу много разных методов расчета этих значений, может ли кто-нибудь показать мне самые быстрые из них?

Ответ 1

Является ли HSB таким же, как HSL?

Нет, HSB совпадает с HSV, но HSL отличается. Все они используются в качестве дружественного способа представления цветов RGB. Статья Википедии о HSL HSV объясняет различия с использованием цветных цилиндров: HSL и HSV В основном, Hue - то же самое для HSB и HSL, но Saturation принимает разные значения, а также яркость и легкость.

Если нет, почему нет HSBL или даже HSBLV?

Я не понимаю. Оба HSB/HSV и HSL могут представлять любой цвет RGB. Наличие B и L самостоятельно невозможно из-за того, как они определены. Данная яркость и насыщенность HSB связана с фиксированной Lightness. Фактически преобразование между ними очень просто.

Я нахожу много разных методов вычисления этих значений, может ли кто-нибудь показать мне самые быстрые из них?

Здесь есть аналогичный вопрос для вычисления HSB из RGB: Быстрый, оптимизированный и точный код преобразования RGB ↔ HSB в C Там есть реализация Java, которая может Помогите. Для преобразования HSB/HSV и HSL см. HSL против HSB против HSV

Ответ 2

  1. HSB! = HSL && HSB == HSV
  2. HSBL и HSBLV не существует, потому что Lightness и Brightness (Value) являются заменителями
  3. Вот методы преобразования (подробнее на вики HSL2RGB и HSV2RGB)

HSV → RGB (реализация в js здесь)

enter image description here

RGB → HSV (реализация в js здесь)

enter image description here

Ответ 3

Первоначально разница между яркостью и легкостью есть. "Яркость" используется для Субтрактивных цветов, а "Яркость" - для Аддитивных цветов. Теперь, если ваша программа работает с субтрактивными цветами, такими как система CMYK, лучше использовать HSB, в противном случае лучше HSL.