Конвертировать цвет

Есть база данных sql которая хранит цвет в формате int например 15620996 после конверта, даже с помощью калькулятора для меня это розовый цвет...

чтобы использовать данное число как цвет конвертирую его различными способами

вот тут нашла функцию

    DECLARE @digit char(1)
    SET @seq = '0123456789ABCDEF'

    SET @result = SUBSTRING(@seq, (@value%16)+1, 1)

    WHILE @value > 0
    BEGIN
        SET @digit = SUBSTRING(@seq, ((@value/16)%16)+1, 1)

        SET @value = @value/16
        IF @value <> 0 SET @result = @digit + @result
    END 

    RETURN @result
END
GO

SELECT dbo.ToHex(15620996)  ---> EE5B84 => что равно розовый

вот так тоже в самой процедуре

,(SELECT '#' + FORMAT(MyColorFromDB, 'X')  FROM MyTable WHERE someCondition) AS ColorTaskHex 

это мне возвращает розовый цвет, но дело в том что это фиолетовый в программе, которая берет из базы данных этот цвет, программа написана на WinDev, и когда я взяла picker и маркером выделила цвет в самой программе, мне это выдало rgb(132, 91, 238) => 84, 5B, EE, потом я ввела в WinDev rvb(132,91,238) и получила 15620996, то есть выходит сохранение данных верно, и мы сохраняем Фиолетовый, но как из этого int (полученного из rvb(?)) получить обратно нормальный цвет в формате hex или rgb ?

Я почитала в самой документации , но что то не пойму как создать 'обратный' алгоритм.

Метку WinDev не нашла, и возможно мало кто с этим работал, но может есть идеи куда копать ?

я вот вижу 84, 5B, EE (фиолетовый из программы) и EE5B84 (розовый, который я получаю из int путем конвертирования) как будто он меняет первое и последнее значение ? или совпадение...


Ответы (2 шт):

Автор решения: Эникейщик

Переводите число 15620996 в шестнадцатиричную форму, получаете 0xEE5B84. Вот вам ваши (84, 5B, EE), можете доставать любым удобным способом.

Вот так можно получить все три RGB-компоненты:

r = a // 256 // 256    # 238
g = (a // 256 ) % 256  # 91
b = a % 256            # 132

// - целочисленное деление, % - остаток от деления.

→ Ссылка
Автор решения: Dev18

@Kromster Есть два варианта записи, RRGGBB и BBGGRR (здесь нужен док)

@Эникейщик Вы можете переставлять местами данные, выбрав из 16тиричной системы

делая выводы, что int, который BGR, мы будем вручную выбирать из базы, меняя местами под наш конкретный запрос, итак:

создаю функцию, и ставлю порядок BBGGRR

ALTER FUNCTION [dbo].[GetColor]
(
    @ColorValue INT
)
RETURNS VARCHAR(50)
AS
BEGIN
   DECLARE @RGBString VARCHAR(50)
    
   
    SET @RGBString = 'RGB(' 
+ CAST(@ColorValue % 256 AS VARCHAR) + ',' 
+ CAST((@ColorValue / 256) % 256 AS VARCHAR) + ','
+ CAST((@ColorValue / 256 / 256) % 256 AS VARCHAR)  + ')'
    
   
    RETURN @RGBString
END

вызываю в запросе

,dbo.GetColor(MyColor) AS ColorTaskHex

на выходе

RGB(132,91,238)

→ Ссылка