Получить уникальный цвет от произвольного года? - PullRequest
1 голос
/ 27 июля 2011

У меня есть график, на котором мне нужно отображать разные столбцы для каждого соответствующего года. До запуска запроса я понятия не имею, какие годы будут возвращаться и отображаться. Мне нужен каждый год бар, чтобы иметь свой собственный уникальный цвет, который заметно отличается от других лет. Мне также нужно иметь возможность воспроизвести результаты метода (например, 2011 год всегда будет возвращать какой-то точный оттенок зеленого). В идеале у меня был бы простой метод, который выглядит следующим образом:

public static Color GetColorFromYear(int year)
{
    // Some magic.
}

Я думаю, что, возможно, есть простые способы преобразовать целое число в значение цвета, но я надеюсь, что кто-то решил эту проблему таким образом, чтобы получить хорошую цветовую схему и различимые цвета. Заранее спасибо!

1 Ответ

1 голос
/ 27 июля 2011

Я бы просто использовал цикл цветов, беря модуль года, для скольких цветов вы хотите использовать:

public static Color GetColorFromYear(int year)
{
    var colors = new Color[] { Color.Red, Color.Yellow, Color.Green, ... };
    return colors[year % colors.Length];
}

Если вы хотите создать некоторую радугу цветов, вы можете использоватьпоследовательность циклов с Color.FromArgb для генерации градиента цветов.Это можно адаптировать к различным уровням градиентов или различным цветовым схемам, изменяя параметры цикла for и различные компоненты красного, зеленого и синего.

var colors = new List<Color>();

// red to green
for (int i = 10; i <= 250; i += 30)
    colors.Add(Color.FromArgb(255 - i, i, 0))

// green to blue
for (int i = 10; i <= 250; i += 30)
    colors.Add(Color.FromArgb(0, 255 - i, i))

// blue to red
for (int i = 10; i <= 250; i += 30)
    colors.Add(Color.FromArgb(i, 0, 255 - i))
...