当前位置:  开发笔记 > 编程语言 > 正文

如何用C#自然地混合颜色?

如何解决《如何用C#自然地混合颜色?》经验,为你挑选了2个好方法。

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

blue + yellow = green 
blue + red = purple

等等.我得到了RGB-Values的颜色.当我尝试混合它们时,我得到了正确的"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转换为L a b*,混合它们 - 将其转换回RGB并返回该颜色.



1> Jason Cohen..:

"天然湿漆"有点含糊不清; 建议的CMYK混合不起作用,因为你仍在添加颜色.

如果你想要像Photoshop中那样的结果(如同Jon B一样),你需要使用L*a*b*空格. 用于将RGB转换为Lab或从Lab转换的公式和描述在此处.

实验室空间是专门设计的,因此线性变化对应于人眼所感知的一定量的颜色变化.这很重要,因为我们对绿色比其他颜色更敏感,因为我们根据色调和亮度等感知不同的变化.

尝试当前正在建议的任何其他方法不仅会产生您不想要的颜色,而且也不会代表颜色的"不断变化"的变化,特别是如果您将此用于不断变化的事情,如渐变.



2> Mark Cidade..:

在http://www.codeproject.com/KB/recipes/colorspace1.aspx上有一篇很好的文章,用于在C#中将RGB转换为L a b .

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有