2011-05-11 76 views
1

我需要颜色数学方面的帮助。我有一个主要颜色,我需要获得其他颜色的选择和谐。 我需要这样的颜色和声:三角,补色,类似,单色。我需要他们在C#中。 任何帮助表示赞赏。 谢谢, 迪马。色彩和声:三角形,补色,类似,单色

+2

如果你给我们一些你需要的和声定义,你可能会得到更多的答案。这样回答者只需要知道C#,而不是C#和色彩和声。 :) – 2011-05-11 09:16:49

+0

我以为我给你定义颜色和声:三田,补码,类似,单色。或者我想念什么? – F0rc0sigan 2011-05-11 12:35:57

+0

@ user604790。这些不是定义,只是一个不同颜色和谐的列表。我的意思是你要包括一个关于三角形的解释,补充是什么,类似是什么,单色是什么。 – 2011-05-11 12:37:54

回答

3

好吧,一切都围绕着您的link中描述的色轮。我建议在数组中对这些颜色进行硬编码。我假设你的主色一直是其中之一12.

我们将需要的一个辅助方法是将数组包围在数组周围的值,例如,颜色-1变为颜色12(索引11阵列):

int WrapColor(int colorIndex, int numWheelColors) 
{ 
    while(colorIndex < 0) 
    { 
     colorIndex += numWheelColors; 
    } 

    colorIndex = colorIndex % numWheelColors; 
} 

我们还需要一个辅助方法,将获得的色轮色彩的指数:

int GetColorWheelIndex(Color color) 
{ 
    if (ColorWheelArray.Contains(color)) 
     return ColorWheelArray.IndexOf(color); 
    else 
     throw new InvalidArgumentException("color"); 
} 

现在一切都到位(假设你有所谓的ColorWheelArray数组,包含颜色按顺序)。

特里亚达:

Color[] GetTriadaColors(Color color) 
{ 
    int colorIndex = GetColorWheelIndex(color, ColorWheelArray.Length); 
    return new Color[] 
     { 
      color, 
      ColorWheelArray[WrapColor(colorIndex + ColorWheelArray.Length/3)], 
      ColorWheelArray[WrapColor(colorIndex + 2 * ColorWheelArray.Length/3)] 
     }; 
} 

人员:

Color GetComplimentColor(Color color) 
{ 
    int colorIndex = GetColorWheelIndex(color, ColorWheelArray.Length); 
    return ColorWheelArray[WrapColor(colorIndex + ColorWheelArray.Length/2)]; 
} 

类似:

Color[] GetAnalogousColors(Color color) 
{ 
    int colorIndex = GetColorWheelIndex(color, ColorWheelArray.Length); 
    return new Color[] { color, 
         ColorWheelArray[WrapColor(colorIndex + 1)], 
         ColorWheelArray[WrapColor(colorIndex + 2)] }; 
} 

,因为我不知道的单色我把它留给你的定义。 :)


编辑:如果你想让它与任何颜色搭配工作,那么我不是100%肯定,但我有一个想法。

该网站表示通过在RYB颜色空间中选取颜色(而不是C#使用的RGB颜色空间)来创建轮子。所以大概你可以计算出你的颜色对轮子上每种颜色有多'远'(通过转换为RYB和比较),然后使用我的函数来获得其他颜色。最后,将颜色和最接近的车轮颜色(在RYB颜色空间中)之间的差值添加到每个结果中,最后再转换回RGB值以存储为Color对象。

+0

感谢您的帮助,它是伟大的。但是,我需要为每种颜色找到色彩和谐,但不仅仅是12.谢谢 – F0rc0sigan 2011-05-11 14:15:44

+0

然后,你需要给我更多的东西继续下去。该页面不显示如何为其他颜色执行此操作。另请参阅我的编辑底部的答案。 – 2011-05-11 14:17:38

+0

我也不知道,所以我在StackOverflow上问这个问题。 – F0rc0sigan 2011-05-11 14:31:49