Вопрос

Я пытаюсь получить цветное значение HSL из моей базы данных. В настоящее время сохраняется только значение RGB. Давайте предположим, что у меня есть отдельные столбцы для RGB: красный зеленый синий с номером 0-255 в них каждый.

Целевой результат

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

Лучший пример для преобразования я нашел здесь:

Это было полезно?

Решение

Это абсолютный кошмар и не протестирован, но у меня пошел:

SELECT 
    CASE 
      WHEN r=g  AND g=b  THEN 0
      WHEN r>=g AND g>b  THEN ((g-b)/(r-b))/6
      WHEN r>=g AND b>=g THEN ((g-b)/(r-g)+6)/6
      WHEN g>=r AND r>=b THEN ((b-r)/(g-b)+2)/6
      WHEN g>=r AND b>r  THEN ((b-r)/(g-r)+2)/6
      WHEN b>=r AND r>=g THEN ((r-g)/(b-g)+4)/6
      WHEN b>=r AND g>r  THEN ((r-g)/(b-r)+4)/6
    END h,
    CASE 
      WHEN r=g  AND g=b  THEN 0
      WHEN r>=g AND g>=b AND  (r-b)>0.5*255 THEN (r-b)/(510-r-b)          
      WHEN r>=g AND g>=b THEN (r-b)/(r+b)
      WHEN r>=g AND b>g  AND  (r-g)>0.5*255 THEN (r-g)/(510-r-g)
      WHEN r>=g AND b>g  THEN (r-g)/(r+g) 
      WHEN g>=r AND r>=b AND  (g-b)>0.5*255 THEN (g-b)/(510-g-b) 
      WHEN g>=r AND r>=b THEN (g-b)/(g+b)
      WHEN g>=r AND b>r  AND  (g-r)>0.5*255 THEN (g-r)/(510-g-r) 
      WHEN g>=r AND b>r  THEN (g-r)/(g+r)
      WHEN b>=r AND r>=g AND  (b-g)>0.5*255 THEN (b-g)/(510-b-g) 
      WHEN b>=r AND r>=g THEN (b-g)/(b+g)
      WHEN b>=r AND g>r  AND  (b-r)>0.5*255 THEN (b-r)/(510-b-r) 
      WHEN b>=r AND g>r  THEN (b-r)/(b+r)
    END s,
    CASE 
      WHEN r=g  AND g=b  THEN r/255
      WHEN r>=g AND g>=b THEN (r+b)/510
      WHEN r>=g AND b>g  THEN (r+g)/510
      WHEN g>=r AND r>=b THEN (g+r)/510
      WHEN g>=r AND b>r  THEN (g+b)/510
      WHEN b>=r AND r>=g THEN (b+g)/510
      WHEN b>=r AND g>r  THEN (b+r)/510
    END l
FROM table1
.

В заключение вам, вероятно, лучше выберите значения RGB и запустите преобразование на уровне приложения!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top