Faq преобразование цвета rgb hls


Содержание

Преобразование RGB в HLS и обратно

Я использую библиотеку python colorsys для преобразования значений цвета RGB в HLS. Просто чтобы проверить, я попробовал конвертировать обратно в RGB и получил другое значение. Я могу понять небольшие различия из-за точности вопросов, но эти значения существенно отличаются.

Зеленое значение отключено более чем на 200%

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

Ваши значения являются способами, вне границ цветового пространства.

Координаты во всех этих цветовых пространствах являются значениями с плавающей запятой. В пространстве YIQ координата Y находится между 0 и 1, но координаты я и Q могут быть положительными или отрицательными. Во всех остальных пространствах координаты находятся между 0 и 1.

Я предполагаю, что вы ожидаете, что они будут байтовыми значениями от 0 до 255? Просто сначала разделите на 255:

Если вы хотите понять, почему вы получаете такие нелепые ошибки, когда вы выходите за пределы цветового пространства.

Хорошо, сначала прочитайте два документа, связанные с документами, чтобы понять, почему значения вне цветового пространства не имеют смысла, и почему вы просите его генерировать значения до невозможных ограничений. Затем, чтобы точно выяснить, почему это не удается, как это происходит, а не каким-либо другим способом, вам нужно знать, какой алгоритм он использует, — что довольно просто, поскольку документы связаны с исходным кодом, который является чистым Python и довольно читаемым.

(PS, я могу себе представить, что может выглядеть 9650% легкости, но мне любопытно, что -100% насыщенности. Возможно, что-то Lovecraftian.)

Faq преобразование цвета rgb < > hls

У меня есть значения HLS цвета. Мне их нужно конвертированть в соответствующие значения RGB. Для этого есть такая ф-ция:

procedure HLStoRGB(H, L, S: Integer; var R, G, B: Integer);
Var
Magic1, Magic2: single;

function HueToRGB(n1, n2, hue: single): single;
begin
if (hue HLSMAX) then hue:=hue-HLSMAX;
if (hue RGBMAX then R:=RGBMAX;
if G RGBMAX then G:=RGBMAX;
if B RGBMAX then B:=RGBMAX;
end;

Обьясните, как она работает?

Это все хорошо, но мне бы хотелось получить закомментированный код именно ПРИВЕДЕННОЙ ВЫШЕ процедуры.

P.S. Такое впечатление, что все вопросы можно отправлять сразу тебе, а не в конференцию :)



> Tahion2 [2]

упрямый какой — чужие исходники, да с комментами.
найди delphi 6, там в исходниках vcl есть модуль graphutil.pas.
в нём есть как раз такая функция, там даже немного комментариев разбросано.

Исходники то не полные. Откуда же я знаю значения констант :)


> Исходники то не полные. Откуда же я знаю значения констант
> :)

Любой каприз, сэр:
Const
HLSMAX=240;
RGBMAX=255;
UNDEFINED=(HLSMAX*2)div 3;

Так, ч честно пытасно закомментировать, но а) лень б) невозможно, если человек не знает, что отображает Hue

Поэтому, что вот получившееся:

< Максимальное значение для H, L и S. Дело в том, что в реальности
H является углом и принимает значения 0..360, а L и S принимают
значения от 0 до 1 (например, 0.1). Однако по принципу типа RGB
нужно, чтобы HLS принимало значения в пределах типа Byte. Можно было
бы присвоить HLSMAX = 255, но дело в том, что хорошо бы, если HLSMAX
делится на 6 (или даже на 12), поэтому взяли HLSMAX = 240 >

< Максимальное значений каждой из состовляющих значение RGB.
Напомню, что RGB кодируется тремя состовляющими — красного (R),
зелёного (G) и синего (B) цветов, каждая из которых может принимать
значения от 0 до 255 [всего 256 значений] >

procedure HLStoRGB(H, L, S: Integer; var R, G, B: Integer);
var
Magic1, Magic2: single;

function HueToRGB(n1, n2, hue: single): single;
begin
if (hue HLSMAX) then hue := hue — HLSMAX;

// Hue можно рассматривать как угол, причём полный угол будет 240, а не 360
// градусов. Повернуть на 250 градусов в нашем случае будет то же самое, что
// повернуть на 250-240=10 градусов. Именно это и делает приведённый выше код.

// Теперь представим, что HLSMAX = 360 градусов. Тогда.

if (hue RGBMAX then R := RGBMAX;
if G RGBMAX then G := RGBMAX;
if B RGBMAX then B := RGBMAX;

Вдумчиво прочитай это:
http://semmix.pl/color/models/emo18.htm

и когда код читаешь, то пусть открыто вот это:
http://semmix.pl/color/extrans/etr50.htm

max(r,g,b) и min(r,g,b) — это из этой оперы:
http://semmix.pl/color/extrans/etr30.htm


На странице 3 — интересная таблица, а далее по страницам есть код, где более понятно, куда какой градус.

Может еще к вот этому можно комментарий придумать?

Илон Маск рекомендует:  Изменение картиники

Magic1 := 2 * L — Magic2;

R := Round((HueToRGB(Magic1, Magic2, H + (HLSMAX / 3)) * RGBMAX + (HLSMAX / 2)) / HLSMAX);
G := Round((HueToRGB(Magic1, Magic2, H) * RGBMAX + (HLSMAX / 2)) / HLSMAX);
B := Round((HueToRGB(Magic1, Magic2, H — (HLSMAX / 3)) * RGBMAX + (HLSMAX / 2)) / HLSMAX);

Ну вот — лабораторка почти и сделана, главное — нахаляву:))

Ну не совсем сделана, и совсем не лабораторка, так что. :)

Magic1 и Magic2 хранят информацию о Saturation и Lightness, эта информация передаётся в HueToRGB через эти переменные. Далее, информация о Hue передаётся отдельно для R, G, B, так как по идее, Hue — это уже цвет, но нам то его нужно разлагать. Как видишь, добавляется 120 градусов (в коде это 240 / 3 = 80) — а это значит, что берутся три равноудалённые точки (см. теорию про цветовое колесо).

Преобразование RGB в HLS и обратно

Я использую библиотеку colorsys python для преобразования значений цвета RGB в HLS. Просто чтобы проверить, я попробовал конвертировать обратно в RGB и получил другое значение. Я могу понять незначительные различия из-за точности вопросов, но эти значения существенно отличаются.

Зеленое значение отключено более чем на 200%

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

One Solution collect form web for “Преобразование RGB в HLS и обратно”

Ваши значения – это путь, выходящий за пределы цветового пространства.

Координаты во всех этих цветовых пространствах являются значениями с плавающей запятой. В пространстве YIQ координата Y находится между 0 и 1, но координаты I и Q могут быть положительными или отрицательными. Во всех остальных пространствах координаты находятся между 0 и 1.

Я предполагаю, что вы ожидаете, что они будут байтами значений от 0 до 255? Просто разделите сначала на 255:

Если вы хотите понять, почему вы получаете такие нелепые ошибки, когда вы выходите за пределы цветового пространства.

Прежде всего, прочитайте два документа, связанные с документами, чтобы понять, почему значения вне цветового пространства не имеют смысла, и почему вы просите его генерировать значения до невозможных ограничений. Затем, чтобы выяснить, почему именно это происходит не так, как это происходит, а не каким-либо другим способом, вам нужно знать, какой алгоритм он использует, – что довольно легко, так как документация ссылается на исходный код, который является чистым Python и довольно читаемым ,


(PS, я могу себе представить, что может выглядеть 9650% легкости, но мне любопытно, что -100% насыщенности. Возможно, что-то Lovecraftian.)

Почему неточно преобразование между RGB и цветовыми системами HLS?

Для одного из моих заявлений я должен преобразовать цвета от RGB до цветовой системы HLS и наоборот. Я нашел, что Пайтон имеет colorsys модуль в его стандартной библиотеке.

Проблема, преобразования иногда немного неточны и возвращают немного отличающиеся результаты по сравнению с этот цветной конвертер онлайн.

Вот пример, сначала две небольших функции, которые я написал для удобства:

Согласно цветному конвертеру онлайн, RGB (123, 243, 61) должен быть равен HLS (100, 60, 88). Результаты я получаю использование функций colorsys, отличаются:

Мое первое впечатление было то, что это — просто округляющаяся проблема, но рассмотрение различия между 61 и 63, там, кажется, другая причина. Но что это? Действительно ли возможно вообще гарантировать абсолютное точное преобразование между цветовыми системами?

Почему преобразование между RGB и HLS цветовых систем неточным?

Для одного из моих приложений, мне нужно преобразовать цвета из RGB в систему цветности HLS и наоборот. Я обнаружил , что Python имеет colorsys модуль в стандартной библиотеке.

Проблема заключается в том , что преобразования иногда немного неточным и вернуться немного разные результаты по сравнению с этим интернет — цветной конвертер .

Вот пример, первые две небольшие функции, которые я написал для удобства:

По данным интернет-цветной конвертер, RGB (123, 243, 61) должна быть равна ЗОЖ (100, 60, 88). Результаты, которые я получаю, используя colorsys функции различны:

Мое первое впечатление было, что это просто проблема округление, но, глядя на разницу между 61 и 63, кажется, есть еще одна причина. Но что это? Является ли это вообще возможно, чтобы гарантировать абсолютное точное преобразование между цветовыми системами?

Изменения :

  • 360 вместо 359 , потому что диапазон [0, 360) ( википедия ).
  • Существовало два закругления без вести convert_rgb_to_hls(r, g, b) .
  • Добавлено питон 3 разделение в случае, если вы используете Python 2.

тесты :


Вы были правы, когда вы сказали, что было округление подобных ошибок, но разница между 61 и 63, потому что вы теряете точность при округлении. Не круглый для лучшей точности:

colors Преобразование цвета HSL в RGB

rgb онлайн (16)

C ++ с вероятностью лучшей производительности, чем код @Mohsen. Он использует диапазон [0-6] для оттенка, избегая деления и умножения на 6. Диапазон S и L равен [0,1]

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

Значение hsl | значение цвета, установленное в javascript, будет мгновенно преобразовано в rgb | a Все, что вам нужно сделать, это доступ к значению вычисленного стиля

Технически, я думаю, это даже не строки кода — это просто сделано автоматически. Таким образом, в зависимости от вашей среды, вы можете уйти от всего этого. Не то, чтобы здесь не было очень много вдумчивых ответов. Я не знаю, какова ваша цель.

Теперь, что, если вы хотите конвертировать из rbg | a в hsl | a?

Php Внедрение кода C # Криса

И here , что объясняет его математику очень хорошо.

Это в основном набор функций для преобразования в и из HSL (Hue Saturation Lightness)

Протестировано и работает на PHP 5.6.15

TL; DR : Полный код можно найти здесь, в Pastebin .

Илон Маск рекомендует:  Что такое код swf_actionwaitforframe

Гнездо для HSL

Вход: Цвет шестнадцатеричного в формате: [#] 0f4 или [#] 00ff44 (знак фунта дополнительно)
Выход: HSL в градусах, процентах, процентах

RGB для HSL


Вход: RGB в диапазоне 0-255 Выход: HSL в градусах, процентах, процентах.

HSL (диапазон 0-1) в градусы, процент, в процентах

Для математических вычислений HSL легче справляться с диапазоном 0-1, но для удобства чтения в классах легче, в процентах, процентах. Эта функция принимает HSL в диапазонах 0-1 и возвращает HSL в градусах, процентах, процентах.

HSL (градусы, процент, процентный формат) для HSL в диапазоне 0-1

Эта функция преобразует HSL в формате Degrees, Percent, Percent, в диапазоны 0-1 для упрощения вычислений.

HSL для RGB

Вход: HSL в формате Degrees, Percent, Percent Output: RGB в формате 255, 255, 255 .

Оттенок к RGB

Эта функция вызывается hslToRgb для преобразования оттенка в отдельные значения RGB.

HSL — Hex

Вход: HSL в формате Степени, Процент, Процент Выход: Hex в формате 00ff22 (без знака фунта).

Преобразует в RGB, затем преобразует отдельно в hex.

PHP-реализация кода @ Mohsen (включая Test!)

Извините за повторное опубликование. Но я действительно не видел никакой другой реализации, которая давала качество, в котором я нуждался.

Если вы ищете что-то, что определенно соответствует семантике CSS для HSL и RGB, вы можете использовать алгоритм, указанный в спецификации CSS 3 , который гласит:

Я считаю, что это источник некоторых других ответов здесь.


Статья для HSL и HSV по википедии содержит некоторые формулы. Вычисления немного сложны, поэтому было бы полезно взглянуть на существующие реализации .

Вот быстрая, сверхпростая, нераспространяемая версия в GLSL:

Не становится намного короче, чем

Ссылка на оригинальное доказательство концепции: https://www.shadertoy.com/view/XljGzV

(Отказ от ответственности: не мой код!)

Мне нужен был очень легкий вес, это не 100%, но он достаточно близко подходит для некоторых случаев.

Garry Tan разместил в своем блоге решение Javascript (которое он приписывает ныне несуществующему mjijackson.com, но архивируется здесь, а оригинальный автор имеет суть — благодаря user2441511).

Код обновляется ниже:

HSL для RGB:

RGB для HSL:

Для всех, кто сказал, что решение Garry Tan конвертирует неверные данные из RGB в HSL и обратно. Это потому, что он оставил часть кода в своем коде. Я исправил его код (javascript). Извините за ссылку на русский язык, но по-английски отсутствует — HSL-wiki

Если вам нужно RGB для HSV и наоборот:

С H, S и L в диапазоне [0,1]:

Найден самый простой способ, питон на rescue : D

Преобразование цвета из координат HLS в координаты RGB.

Код Unity3D C # из ответа Мохсена.

Вот код ответа Мохсена на C #, специально предназначенный для Unity3D. Он был адаптирован из ответа C #, данного Алек Тилениус выше.


Java-реализация кода Мохсена

Обратите внимание, что все целые объявляются как float (т.е. 1f) и должны быть float, иначе вы будете выбирать серые цвета.

HSL для RGB

RGB для HSL

Код C # из ответа Мохсена.

Вот код ответа Мохсена на C #, если кто-то еще этого захочет. Примечание. Color — это пользовательский класс, а Vector4 — из OpenTK. Оба легко заменить чем-то другим по вашему выбору.

Процедуры преобразования моделей цветов

В данном приложении приведены процедуры перевода из RGB в HSV и наоборот и процедуры перевода из RGB в HLS и наоборот, соответствующие процедурам из [Род89] и [Фол85]. В процедурах используется вещественная арифметика. Переход на целочисленную арифметику, более подходящую для реальных применений, может быть выполнен определением констант для максимальных значений координат цвета — R,G,B, оттенка (hue), насыщенности (saturation), светлоты (value или lightness) и соответствующей модификацией текстов процедур.

0.14.1 V_HSVRGB — перевод из HSV в RGB


0.14.2 V_RGBHSV — перевод из RGB в HSV


0.14.3 Тест процедур V_HSVRGB и V_RGBHSV


0.14.4 V_HLSRGB — перевод из HLS в RGB


0.14.5 V_RGBHLS — перевод из RGB в HLS


0.14.6 Тест процедур V_HLSRGB и V_RGBHLS

1. Электромагнитная волна (в религиозной терминологии релятивизма — «свет») имеет строго постоянную скорость 300 тыс.км/с, абсурдно не отсчитываемую ни от чего. Реально ЭМ-волны имеют разную скорость в веществе (например,

200 тыс км/с в стекле и


3 млн. км/с в поверхностных слоях металлов, разную скорость в эфире (см. статью «Температура эфира и красные смещения»), разную скорость для разных частот (см. статью «О скорости ЭМ-волн»)

2. В релятивизме «свет» есть мифическое явление само по себе, а не физическая волна, являющаяся волнением определенной физической среды. Релятивистский «свет» — это волнение ничего в ничем. У него нет среды-носителя колебаний.

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

4. В гравитационном релятивизме (ОТО) вопреки наблюдаемым фактам утверждается об угловом отклонении ЭМ-волн в пустом пространстве под действием гравитации. Однако астрономам известно, что свет от затменных двойных звезд не подвержен такому отклонению, а те «подтверждающие теорию Эйнштейна факты», которые якобы наблюдались А. Эддингтоном в 1919 году в отношении Солнца, являются фальсификацией. Подробнее читайте в FAQ по эфирной физике.

Преобразовать ARGB в RGB

22.05.2013, 13:07

Как преобразовать RGB в sRGB?
Как реализовать алгоритм конвертации RGB (0-255) в sRGB (0-1) ?

Принимаемые данные с датчика через Serial port преобразовать в RGB
Всем доброго времени суток! Стоит одна задача. Необходимо, получая строки с датчика цвета.

Получение ARGB из BMP
Здравствуйте! Не могли бы Вы подсказать как получить таблицу ARGB из изображения .bmp? Глубина.

Илон Маск рекомендует:  Что такое код destroyicon

Преобразование RGB в HLS и обратно

Я использую библиотеку colorsys python для преобразования значений цвета RGB в HLS. Просто чтобы проверить, я попробовал конвертировать обратно в RGB и получил другое значение. Я могу понять незначительные различия из-за точности вопросов, но эти значения существенно отличаются.

Зеленое значение отключено более чем на 200%

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

One Solution collect form web for “Преобразование RGB в HLS и обратно”

Ваши значения – это путь, выходящий за пределы цветового пространства.

Координаты во всех этих цветовых пространствах являются значениями с плавающей запятой. В пространстве YIQ координата Y находится между 0 и 1, но координаты I и Q могут быть положительными или отрицательными. Во всех остальных пространствах координаты находятся между 0 и 1.


Я предполагаю, что вы ожидаете, что они будут байтами значений от 0 до 255? Просто разделите сначала на 255:

Если вы хотите понять, почему вы получаете такие нелепые ошибки, когда вы выходите за пределы цветового пространства.

Прежде всего, прочитайте два документа, связанные с документами, чтобы понять, почему значения вне цветового пространства не имеют смысла, и почему вы просите его генерировать значения до невозможных ограничений. Затем, чтобы выяснить, почему именно это происходит не так, как это происходит, а не каким-либо другим способом, вам нужно знать, какой алгоритм он использует, – что довольно легко, так как документация ссылается на исходный код, который является чистым Python и довольно читаемым ,

(PS, я могу себе представить, что может выглядеть 9650% легкости, но мне любопытно, что -100% насыщенности. Возможно, что-то Lovecraftian.)

Цветовые палитры для пространства HSV

«Готовь сани летом» — именно этой пословице мы с другом решили последовать, начав разрабатывать новогоднюю гирлянду на широко известных RGB светодиодах со встроенным драйвером WS2812B.
После того, как было решено, что все программные манипуляции с цветом будем производить в цветовой модели HSV, встал вопрос о конвертере HSV->RGB. Ибо формата отличного от RGB светодиоды не понимают. Использовать готовые конвертеры или тупо переложить в код готовые формулы преобразований, чтобы просто оперировать стандартным пространством HSV — неинтересно. Душа требовала какой-нибудь изюминки. Ну и в общем-то что хотела, то и получила.

О цветовых пространствах

Начать следует наверное с маленького пояснения о цветовых пространствах. Например, можно провести аналогию с радиотехникой. Я думаю, что все кто сидит на we.ee знакомы с обработкой сигналов. И знают, что один и тот же сигнал можно рассматривать через призму разных математических моделей — во временной области, в частотной или вообще в пространстве изображений (Лаплас). И каждое из представлений способно предложить определенные удобства, которые не могут дать другие модели. Аналогично и с цветами. Думаю каждый знаком с цветовой моделью RGB и знает, что для получения необходимого цвета нужно смешать три составляющих (Red, Green, Blue) в определенных пропорциях. Вроде ничего сложного, но это до тех пор, пока не понадобится, например, делать плавное радужное перетекание цветов. Не, ну конечно это реализуемо, ну а если допустим параллельно нужно управлять общей яркостью? Уже чего-то не весело. Но тут на помощью приходят другие цветовые модели.

HSV — Hue, Saturation, Value. А если по-русски то: оттенок(H), насыщенность(S), значение(V, или по-другому яркость). Как видно, здесь уже нет явных компонент цвета, с которыми непонятно что делать в сложных ситуациях, а вполне человеческие характеристики, которыми удобно оперировать.
Любой, кто пользовался растровым редактором сталкивался с этой цветовой моделью. Вот например окно выбора цвета из одной весьма уважаемой программы.

По горизонтальной оси слева направо изменяется H[0;360гр], по вертикальной S[0;100%], шкала рядом регулирует яркость B[0;100%] (это Brightness, тоже самое что и Value).
Ну а теперь попробуем сделать радужный перелив цветов — легко, просто инкрементируем постоянно значение оттенка(H). Нужно изменить яркость? Проще простого, изменим значение V.

Конвертер HSV->RGB

К сожалению, работа с цветовыми моделями, отличными от RGB, подразумевает обратный переход после всех манипуляций, т.к. RGB-светодиоды по другому и не умеют. Как я уже говорил, готовых конвертеров тьма, а формулы перевода можно хоть на той же википедии посмотреть. Так в чем же «изюм»? А в том, что можно сделать свои собственные цветовые палитры сделать! По умолчанию подразумевается палитра вида: красный, желтый, зеленый, голубой, синий, фиолетовый, красный. Вдоль которой мы можем перемещаться изменяя H.
Но можно сделать палитру в синих тонах например (по горизонтали H, по вертикали S).

А можно например реализовать радугу специально для магистра Йоды: «Где Фазан Сидит, Желает Знать Охотник Каждый».

В общем простор для фантазии безграничный.
И под это дело была написана аппаратнонезависимая микробиблиотека на Си, содержащая пару типов и аж одну функцию =)
Вот содержимое hsv_color_pallete.h

Внутреннее устройство библиотеки вполне прозрачно. Есть массив палитр, а по сути массив структур в несколько слоев, которые заполняются данными во время компиляции вполне очевидными макросами. Ну и есть функция преобразования, которая принимает ссылки на структуры источника и приемника данных, а также имя палитры, и затем творит свои темные преобразовательные дела. Вообщем зачем долго говорить, вот содержимое hsv_color_pallete.c

Саму математику преобразования расписывать пока не буду, но если кому-то будет интересно или непонятно, то сделаю это. Там все просто, и по сути к таким расчетам можно прийти чисто эмпирически, если посидеть в графическом редакторе и подергать ползунки HSV, с целью оценить их влияние на RGB.

Ну а в итоге мы получаем кастомизированное цветовое пространство HSV, которое открывает широчайшие просторы для создания эффектных программ свечения RGB светодиодов и лент.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL