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

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


Есть база данных 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 путем конвертирования) как будто он меняет первое и последнее значение ? или совпадение...



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

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

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

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


Report Page