Страницы

Поиск по вопросам

вторник, 28 января 2020 г.

Расчет “цветовой карты” в C#

#c_sharp #цвета


Нужно чтобы числа от 0 до 255 соответствовали такой вот color map 

и в результате получались три числа RGB, например (0,0,255)
    


Ответы

Ответ 1



Вам поможет вот эта иллюстрация с Википедии (ссылка) Ваш пример начинается с 240° и идет налево до 0°. Вам нужно разделить всю ширину на 4 области. 1 четверть: Синий 100%, Зеленый растет от 0% до 100% 2 четверть: Зеленый 100%, Синий уменьшается со 100% до 0% 3 четверть: Зеленый 100%, Красный растет от 0% до 100% 4 четверть: Красный 100%, Зеленый уменьшается со 100% до 0% Думаю с арифметикой приведения вы справитесь

Ответ 2



Немного поработал над вашей картинкой. Если рассмотреть, то понятно что синий цвет идет от 0 до 127 с интенсивностью от 255 до 0. зеленый цвет идет от 0 до 127 с интенсивностью от 0 до 255 и от 128 до 255 с интенсивностью от 255 до 0 красный цвет от 128 до 255 с интенсивностью от 0 до 255 Основываясь на это пишем код: struct Color { public Color(int r, int g, int b) { R = r; G = g; B = b;} int R,G,B; } Color getColor(int color) { int red = (color >= 128) ? (color - 128)*2 : 0; int green = (color < 128) ? color*2 : 255 - (color - 128)*2; int blue = (color < 128) ? 255 - 2*color : 0; return new Color(red,green,blue); } Передает в функцию число от 0 до 255, получаем цвет в RGB. P.S. Возможно, плохо обработал граничные значения (0, 127 или 128 и 255).

Комментариев нет:

Отправить комментарий