Недавно сталкнулся с задачей, в одном элементе которой требовалось преобразование
rgb -> hsv.
Вначале хотелось сделать всё по общеизвестным формулам: https://ru.wikipedia.org/wiki/HSV_(%D1%86%D0%B2%D0%B5%D1%82%D0%BE%D0%B2%D0%B0%D1%8F_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C)
Но после увидел, что в System.Drawing.Color для этого имеются специальные методы, которые возвращают нужные мне параметры:
GetHue() - Gets the hue-saturation-brightness (HSB) hue value, in degrees, for this Color structure. GetSaturation() - Gets the hue-saturation-brightness (HSB) saturation value for this Color structure. GetBrightness() - Gets the hue-saturation-brightness (HSB) brightness value for this Color structure.
Казалось, что дело в шляпе, но не тут то было, поскольку, как видно по формулам, для чистых цветов, к примеру RGB(255,0,0), параметр B, то есть яркость, должен быть 100%, однако на деле, черезе метод GetBrightness() выходит лишь 50%. Далее решил глянуть реализацию данных методов (что бы убедиться, что я не спятил): https://referencesource.microsoft.com/#System.Drawing/commonui/System/Drawing/Color.cs,23adaaa39209cc1f
как видно, возвращается не [max(r,g,b) / 255] * 100% , а среднее между максимальным и минимальным так где же я неправ? или откуда взялись странные формулы, по которым реализованны данные методы, м.б. это ошибка разработчиков или же ошибаюсь я?
Добрый человек, Kromster, в коментарии упомянул про модель HSL и вот оно! хоть в документации и написано, что данные методы возвращают параметры для модели HSB, однако значения считаются как раз таки для модели HSL.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Здравствуйте! Большую часть времени я пишу на С#, но мне всегда не хватало в этом прекрасном языке макросов (однажды попробовав макросы LISP, трудно...
При передаче большого объема данных в WCF службу, передаваемое приложение начинает безмерно потреблять ОЗУ 240>364>478>797 Мб и тд
Я хочу запускать скрипт, когда мой объект в юнити, допустим, преодолеет 47f по координате "y" в 2д пространстве