2011-07-26 30 views
1

我有一個圖表,我需要顯示每個相關年份出現的不同欄。在運行查詢之前,我不知道哪些年份將被返回並顯示。我需要每年酒吧擁有自己獨特的色彩,與其他年份明顯區別開來。我還需要能夠重現該方法的結果(例如,2011年將始終返回一些精確的綠色陰影)。理想情況下,我想有一個簡單的方法,看起來像這樣:從任意年份獲得獨特的顏色?

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

我猜有可能是簡單的方法來一個整數轉換成顏色值,但我希望有人已經解決的方式這個問題產生一個不錯的配色方案和可區分的顏色。提前致謝!

+0

這似乎是一個矛盾的問題:它不知道什麼年份將返回,但每年應該有它自己的可重複的顏色。如果返回的年份碰巧有相似的顏色呢? –

+0

「相似」的顏色並不是真正的問題。鑑於只有如此多的現實年值,以及許多可以代表顏色的有效整數,我認爲有充足的空間進行可靠的變化。 – Ocelot20

回答

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

謝謝!我喜歡這兩種解決方案。 – Ocelot20