2011-07-26 9 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

関連する問題