Алгоритм линейного увеличения цветовой темноты - PullRequest
2 голосов
/ 29 августа 2009

Я хочу написать в ruby ​​функцию, которая с числом от 1 до 500 выведет 6-значный шестнадцатеричный цветовой код, который становится линейно темнее для больших чисел. Это не кажется сложным, но я не уверен, с чего начать. Как я могу это реализовать?

редактировать

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

ввод: 10
вывод: цветовой код (в rgb или HSV), который является светлым оттенком эталонного цвета

ввод: 400
вывод: цветовой код (в rgb или HSV), который является довольно темным оттенком эталонного цвета

редактировать 2

Единственная причина, по которой мне нужно использовать от 1 до 500, - это то, с чем мне приходится работать. Все в порядке, если некоторые числа, которые находятся рядом, отображаются в один и тот же цвет.

Ответы [ 4 ]

3 голосов
/ 29 августа 2009

6-значный шестнадцатеричный цветовой код в RGB. Вы хотите работать в HSV: выберите Hue и Saturation и постепенно уменьшайте значение. Конвертировать из HSV в RGB для вывода цвета. См. здесь для примера.

2 голосов
/ 29 августа 2009

Базовая линейная интерполяция?

// Pseudocode
function fade_colour(source, factor)
    const max = 500
    const min = 1

    foreach component in source
        output[component] = round(source[component] * (max - value) / (max - min))
    endforeach

    return output
endfunction
1 голос
/ 29 августа 2009

Если вы хотите затемнить свой эталонный цвет, это легко. Учитывая цвет R, G, B, который является самым ярким, который вы хотите использовать, умножьте каждое из 3 значений на (500-входное) и разделите на 499. Преобразуйте каждое из значений в 2 шестнадцатеричные цифры и добавьте их с # в передний.

1 голос
/ 29 августа 2009

Почему бы просто не вернуть уровень серого, тогда #ffffff на # 000000? 500 уровней тьмы на самом деле не различимы, а серые дают 256 уровней.

...