2011-09-06 58 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