2011-09-06 60 views
2

我想有一個包含各種顏色的表。隨後的顏色應該顯着不同。根據這一點,填充相當大的表格的最佳方法是什麼?我想在重複相似的顏色之前使用大量不同的顏色。在C中不同顏色的表#

+0

定義「大」,定義「顯着不同」? – AnthonyWJones

+0

大,例如1000種顏色。差異顯着 - 我想獲得例如紅色,藍色,綠色,而不是紅色,深紅色,紫色;-)很快,我想避免重複類似的顏色。 – Jamie

+0

我使用HSL/HSV顏色獲得了很好的效果,並將它們轉換回RGB。你保持SL/SV固定並通過H值。 – xanatos

回答

1

這裏是我的解決方案(在那一個Silverlight兼容的一個)。

IEnumerable<Color> VaryingColors(int seedIndex) 
    { 
     int maxValue = 1 << 24; 
     int index = seedIndex % maxValue; 

     while (true) 
     { 
      byte r = 0; 
      byte g = 0; 
      byte b = 0; 

      for (int i = 0; i < 24; i++) 
      { 
       if ((index & (1 << i)) != 0) 
       { 
        switch (i % 3) 
        { 
         case 0: r |= (byte)(1 << (23 - i)/3); break; 
         case 1: g |= (byte)(1 << (23 - i)/3); break; 
         case 2: b |= (byte)(1 << (23 - i)/3); break; 
        } 
       } 
      } 

      yield return Color.FromArgb(0xFF, r, g, b); 

      index = (index + 1) % maxValue; 
     } 
    } 

這是一個用法示例。像這樣創建一個新的Silverlight應用程序並添加ListBox MainPage.xaml中: -

<ListBox ItemsSource="{Binding}"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <Rectangle Width="200" Height="20" Fill="{Binding}" /> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

在MainPage.xaml.cs構造包括這樣的代碼: -

DataContext = VaryingColors(0).Take(100).Select(c => new SolidColorBrush(c)); 

顏色發生器將產生全部1600萬種可能的顏色,並且首先操作RGB組件的最重要位。可能需要多一點工作,有些相鄰顏色的出現與序列的其餘部分比較相似,儘管它們總是明顯不同。

一個增強功能可能是在序列上添加一個過濾器,以放棄太暗或飽和度非常低的顏色。事實上,可能會添加另一個過濾器,以放棄序列中與色彩接近的色彩。

0

你可以在C#中使用GridView,然後使用

GridView_RowDataBound(object sender, GridViewRowEventArgs e) 

方法更改爲任何顏色你需要的單元格的背景顏色。

if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
    e.Row.Cells[4].BackColor = System.Drawing.Color.FromName("#EE3333"); // makes the 4th cell red 
    e.Row.BackColor = System.Drawing.Color.ForestGreen; // Makes the whole row Green 
    } 

使用此方法,您可以使用RGB顏色將單元格變爲您喜歡的顏色。

http://rgbchart.com/

http://www.tayloredmktg.com/rgb/

+0

對不起,我想你沒有理解我的問題:-) – Jamie