【问题标题】:How to mix colors "naturally" with C#?如何用 C#“自然地”混合颜色?
【发布时间】:2010-09-28 17:35:50
【问题描述】:

我必须以自然的方式混合一些颜色。这意味着

blue + yellow = green 
blue + red = purple

等等。我将颜色作为 RGB 值。当我尝试混合它们时,我得到了正确的“RGB”结果,例如

green + red = yellow
yellow + blue = white

但不是正确的“自然湿漆”结果。知道如何以自然的方式混合 RGB 吗?

如果有人知道Microsoft.Xna.Framework.Graphics 命名空间内的解决方案,那就太好了,但通用解决方案也会有所帮助:)


@Jay Bazuzi:

请发布一个代码示例,显示 你想做什么。

当然 - 这是我混合两种 RGB 颜色的功能。

public Color colorMixer(Color c1, Color c2)
{

    int _r = Math.Min((c1.R + c2.R),255);
    int _g = Math.Min((c1.G + c2.G),255);
    int _b = Math.Min((c1.B + c2.B),255);

    return new Color(Convert.ToByte(_r),
                     Convert.ToByte(_g),
                     Convert.ToByte(_b));
}

到目前为止,我在此线程中所读到的内容非常有希望 - 我会将 C1 和 C2 转换为 Lab*,将它们混合 - 将其转换回 RGB 并返回该颜色。

【问题讨论】:

  • 请发布一个代码示例,说明您正在尝试做什么。
  • stackoverflow.com/questions/10254022/,这里有更详细的讨论。
  • 好问题!你的 colourMixer 方法也帮了我很多!

标签: c# .net colors mixing


【解决方案1】:

“天然湿漆”有点含糊;建议的 CMYK 混合不起作用,因为您仍在添加颜色。

如果您想要 Photoshop 中的结果(如 Jon B 所检查的那样),您需要使用 L*a*b* 空间。 用于将 RGB 转换为/从 Lab 和描述 is here 的公式。

实验室空间经过专门设计,线性变化与人眼所感知的颜色变化相对应。这很重要,因为例如我们对绿色比其他颜色更敏感,因为我们根据色调和亮度等对变化的感知不同。

尝试当前建议的任何其他方法不仅会产生您不想要的颜色,而且不会代表颜色的“恒定外观”变化,特别是如果您将其用于恒定变化很重要的事情像一个渐变。

【讨论】:

  • 有希望的想法,但是在将它们转换为 LAB 后如何混合这两种颜色?请参阅我的问题:stackoverflow.com/q/14819058/240324
  • @TamasPap 与您“混合”任何其他数量的方式相同。例如,将它们的分量平均在一起。
【解决方案2】:

您可以通过WIC 免费获得 cmykrgb 转换。 但它只是 .NET 3.0

【讨论】:

  • 不是,WIC 有一个 COM 接口可用于任何 .NET 版本
猜你喜欢
  • 2013-01-26
  • 2011-05-07
  • 2013-06-05
  • 1970-01-01
  • 1970-01-01
  • 2021-09-17
  • 2020-01-01
  • 1970-01-01
相关资源
最近更新 更多