【问题标题】:Color harmonies:triada, complement, analogous, monochromatic颜色和声:triada、补色、相似、单色
【发布时间】:2011-05-11 08:35:58
【问题描述】:

我需要颜色数学方面的帮助。我有一种主要颜色,我需要选择其他颜色的和谐。 我需要这样的色彩和谐:三重奏、补色、相似、单色。我在 C# 中需要它们。 任何帮助表示赞赏。 谢谢, 迪玛。

【问题讨论】:

  • 如果你给我们一些你需要的和声的定义,你可能会得到更多的答案。这样回答者只需要知道 C#,而不是 C# 和颜色和谐。 :)
  • 我想我给你定义颜色和声:triada、补色、类比、单色。还是我错过了什么?
  • @user604790。这些不是定义,这只是不同颜色和声的列表。我的意思是让你解释一下什么是三元组,什么是补码,什么是类比,什么是单色。

标签: c# .net colors color-scheme


【解决方案1】:

好的,一切都围绕着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 对象。

【讨论】:

  • 感谢您的帮助,这很棒。但是需要为我提供的每种颜色找到颜色和谐,但不仅仅是 12 种颜色。谢谢
  • 那你需要给我更多才能继续。该页面没有显示如何为其他颜色执行此操作。另外,请参阅我的编辑底部答案。
  • 我也不知道,所以我在 StackOverflow 上问了这个问题。
  • 好的,我认为除非有人碰巧知道色彩理论,否则您可能不得不在我的答案底部进行我的编辑。您可以尝试在 graphicsdesign.stackexchange.com 上提出问题,然后如果您能得到很好的解释,那么这里的人可以帮助提供实际代码。
  • 好的,我没有时间为你做这个,但要做你想做的事,你需要将 RGB 颜色转换为 CIELCH 颜色空间,然后进行上面网址中描述的转换然后翻译回RGB。我找不到太多关于从 RGB 转换为 CIELCH 并返回的信息,因为 RGB 取决于设备。我确实找到了一个使用公式执行此操作的 Excel 电子表格的链接,因此您可以查看它来解决它。完成此操作后,根据更改 CIELCH 颜色返回颜色应该很容易。 ccc.orgfree.com
猜你喜欢
  • 2016-08-31
  • 2018-03-22
  • 1970-01-01
  • 1970-01-01
  • 2015-08-20
  • 2021-05-04
  • 2014-11-14
  • 2016-12-08
  • 2011-12-12
相关资源
最近更新 更多