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

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

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

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

  1. HSB такой же, как HSL?

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

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

21

Решение

HSB такой же, как HSL?

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

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

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

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

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

28

Другие решения

  1. HSB! = HSL && HSB == HSV
  2. HSBL || HSBLV == null // потому что заменители Lightness и Brightness (Value)
  3. Я обновляю вики и предоставляю более простое альтернативное преобразование: HSL2RGB а также HSV2RGB
0

По вопросам рекламы [email protected]