2016-05-27 208 views
0

我不知道如何分類這個問題,也沒有有效解釋,但我會盡我所能。訂購顏色的十六進制值

我有一系列從我的應用程序收集的隨機十六進制代碼值。

我想用漸變呈現這些顏色,這將(理論上)顯示出一組顏色的顯着性。

如果在我的隨機顏色數組中有更多的藍色陰影,那麼把它放入這個漸變將反映出這一點。

但首先,我需要將漸變中的顏色「排序」爲顏色旁邊的顏色。

我正在使用C# - 但更多的是在理論之後如何將十六進制顏色值映射/排序/組合在一起。

+0

在什麼格式,你有這些價值觀開始呢?它是一個.net Drawing.Color還是隻是文本? – llouk

+2

您可以將它們轉換爲HSV並通過色調進行排序。 –

+2

由於色彩空間爲3d且線性漸變爲1d,因此不可能有實際順序。所以你需要投射3d - > 1d。轉換爲彩色或HSV是一個很好的第一步,但是你將不得不決定..見[這裏是關於色距的討論](http://stackoverflow.com/questions/27374550/how-to-compare-color -object-and-get-nearest-color-in-an-color/27375621?s = 1 | 1.0462#27375621) – TaW

回答

0

感謝您的評論,我使用Hue方法進行評論,結果如下 - 這很好用,正如您可以看到的那樣,顯示我的List of colors中有更多的Blue顏色(它是動態設置的)再次感謝。

,但仍然存在一個bug - 它重複佔用整個高度出於某種原因:(代替(應該僅是1直線從藍調紅)

(我將打開另一個問題。本)

LinearGradientBrush

我的代碼如下(ColorFromString是我寫this question的方法):

private Color[] OrderColorByHue(List<string> colors) 
{ 
    foreach(string c in colors) 
    { 
    Color color = ColorFromString(c); // This was defined in another question of mine :) 
    float hue = color.GetHue(); 

    hueColors.Add(new KeyValuePair<Color, float>(color, hue)); 
    } 

    hueColors.Sort((color1, color2) => color2.Value.CompareTo(color1.Value)); 
    Color[] value = hueColors.Select(color => color.Key).ToArray(); 

    return value; 
} 

希望這有助於別人:)

0
// GET: Admin/Colors 
    public ActionResult Index() 
    { 
     var colors = db.Colors.OrderBy(a => a.HexCode); 
     return View(colors); 
    } 

我用它在我的MVC.Net項目。 我想你可以自己修改它。

HexCodes必須以「#」(訂貨重要)