色彩和声:三角形,补色,类似,单色

时间:2011-05-11 08:35:59

标签: c# .net colors color-scheme

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

1 个答案:

答案 0 :(得分: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)] };
}

由于我不知道单色的定义,我会留给你。 :)


编辑:如果你想让它适用于任何颜色,那么我不是百分百肯定,但我有一个想法。

该网站表示通过在RYB颜色空间中拾取颜色(而不是C#使用的RGB颜色)来创建滚轮。因此,大概你可以弄清楚你的颜色与车轮上的每种颜色的距离(通过将两者转换为RYB并进行比较),然后使用我的函数来获得其他颜色。最后添加颜色与最接近的轮颜色(在RYB颜色空间中)之间的差异,最后转换回RGB以存储为Color对象。