【问题标题】:Get Unique Color from Arbitrary Year?从任意年份获得独特的颜色?
【发布时间】:2011-07-26 21:48:49
【问题描述】:

我有一个图表,我需要在其中显示出现的每个相关年份的不同条形图。在运行查询之前,我不知道将返回和显示哪些年份。我需要每一年的酒吧都有自己独特的颜色,与其他年份明显不同。我还需要能够重现该方法的结果(例如,2011 总是会返回一些精确的绿色阴影)。理想情况下,我会有一个如下所示的简单方法:

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

我想可能有一些简单的方法可以将整数转换为颜色值,但我希望有人解决了这个问题,以产生漂亮的配色方案和可区分的颜色。提前致谢!

【问题讨论】:

  • 这似乎是一个矛盾的问题:不知道会返回什么年份,​​但每年都应该有自己的可重现颜色。如果返回的年份恰好有相似的颜色怎么办?
  • “相似”颜色并不是真正的问题。鉴于只有这么多现实的年份值,以及这么多更多个可以表示颜色的有效整数,我认为有足够的空间进行可靠的变化。

标签: c# .net colors charts color-scheme


【解决方案1】:

我会通过取年的模数来使用颜色循环,无论你想使用多少颜色:

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))

【讨论】:

  • 谢谢!我喜欢这两种解决方案。
猜你喜欢
  • 2017-12-17
  • 1970-01-01
  • 2010-10-20
  • 2023-02-08
  • 1970-01-01
  • 2019-10-16
  • 2019-12-01
  • 1970-01-01
相关资源
最近更新 更多