Генерация градиента цвета - PullRequest
2 голосов
/ 08 июня 2010

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

Ответы [ 2 ]

3 голосов
/ 08 июня 2010

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

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

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

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

1 голос
/ 08 июня 2010

Вам не нужно рассчитывать это самостоятельно - попробуйте использовать кисть LinearGradient. ( * 1003 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);
...