2010-06-08 4 views
2

Я хочу показать своему пользователю, сколько (процентов мудрых) их форм соответствует новому стандарту. То, как я хочу, чтобы они знали визуально, - это процентное количество будет окрашено. Он будет 0xFF0000 (чистый красный) для 0% и 0x00FF00 (чистый зеленый) на 100%. Каков наилучший способ рассчитать цвет для каждого шага на этом пути?Создание цветового градиента

+0

http://stackoverflow.com/questions/668263/algorithm-question-need-to-dynamically-increment-from-00ff00-to-ff0000- over-time/669786 # 669786 –

+1

Предположительно, новый стандарт не имеет ничего общего с доступностью, поскольку некоторые из ваших пользователей не смогут определить разницу между красным и зеленым. –

+0

Да, зеленый <-> Красный цвет будет жестким для людей с цветной слепотой. –

ответ

3

Преобразование цвета пространство (как это было предложено Tony) даст вам лучшие результаты. Если же это выходит за рамки того, что вы ищете, я предлагаю простой алгоритм, который заставит вас желтым (0xFFFF00) на 50%:

Для значений до 50% Начните с 0xFF0000.
Добавить 0xFF * Процент/50 на зеленый компонент.

Для значений выше 50% Начните с 0xFFFF00.
Вычитание 0xFF * Процент/50 из красного компонента.

результаты выглядят достаточно хорошо для моих клиентов ;-)

1

Вам не нужно его вычислять самостоятельно - попробуйте использовать щетку LinearGradient. (msdn)

LinearGradientBrush linGrBrush = new LinearGradientBrush(
    new Point(0, 10), 
    new Point(200, 10), 
    Color.FromArgb(255, 255, 0, 0), // Opaque red 
    Color.FromArgb(255, 0, 0, 255)); // Opaque blue 

Pen pen = new Pen(linGrBrush); 

e.Graphics.DrawLine(pen, 0, 10, 200, 10); 
e.Graphics.FillEllipse(linGrBrush, 0, 30, 200, 100); 
e.Graphics.FillRectangle(linGrBrush, 0, 155, 500, 30); 
Смежные вопросы