相关疑难解决方法(0)

有没有一种颜色混合的算法,就像混合真实颜色一样?

RGB颜色的常见混合与绘画的混合颜色非常不同,它是混合光而不是混合颜料.

例如:

Blue (0,0,255) + Yellow (255,255,0) = Grey (128,128,128)
Run Code Online (Sandbox Code Playgroud)

(它应该是蓝色+黄色=绿色)

是否有任何已知的混色算法,就像混合真实颜色一样?


我的方法

我已经尝试过以下内容:

将两种颜色转换为HSV并混合色调(乘以从饱和度计算的系数),以及饱和度和值通道的简单平均值.然后我从两种颜色计算平均亮度,并调整结果颜色以匹配此亮度.这很有效,但色调混合有时是错误的,例如:

Red (Hue 0°) + Blue (Hue 240°) = Green (Hue 120°)
Run Code Online (Sandbox Code Playgroud)

我发现有时我需要将色调值移动360°(当色调之间的差异大于180°时).

Red (Hue 360°) + Blue (Hue 240°) = Magenta/fuchsia (Hue 300°)
Run Code Online (Sandbox Code Playgroud)

但这种转变也不是很好,例如:

Cyan (Hue 179°) + Red (Hue 0°) = Hue 89.5°
Cyan (Hue 181°) + Red (Hue 0°) --> shifting is performed (the difference is greater than 180°)
Cyan (Hue 181°) + Red (Hue 360°) = Hue 270.5°
Run Code Online (Sandbox Code Playgroud)

(色调179 +红色)和(色调181 +红色)产生两种完全不同的颜色. …

language-agnostic algorithm blending colors color-space

59
推荐指数
3
解决办法
2万
查看次数

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

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

blue + yellow = green 
blue + red = purple
Run Code Online (Sandbox Code Playgroud)

等等.我得到了RGB-Values的颜色.当我尝试混合它们时,我得到了正确的"RGB"结果

green + red = yellow
yellow + blue = white
Run Code Online (Sandbox Code Playgroud)

但不是正确的"天然湿涂料" - 结果.如何以自然的方式混合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));
}
Run Code Online (Sandbox Code Playgroud)

到目前为止我在这个帖子中读到的内容非常有前途 - 我将C1和C2转换为L a b*,混合它们 - 将其转换回RGB并返回该颜色.

.net c# colors mixing

45
推荐指数
2
解决办法
3万
查看次数

在javascript中"自然地"混合两种颜色

问题:我想在javascript中混合两种颜色,并获得结果颜色.在SO上有很多类似的问题,但我没有发现任何实际上正常工作的问题.我知道混合两种不同颜色的颜料(颜料)和灯会产生非常不同的结果(http://en.wikipedia.org/wiki/Color_mixing).

以下是我已经看到的问题和建议的解决方案,并尝试实施:

1: 混合两个RGB颜色矢量以得到结果
因此,混合RGB中的颜色.我实现了它,在某些情况下它可以在某些情况下使用它没有.

工作示例:redyellow- > 混合orange.大!
http://jsbin.com/afomim/1/edit

不工作的例子:blueyellow- > 混合gray.不太好!:) http://jsbin.com/afomim/5/edit
我知道,在RGB混合blue使用yellow不会让green的,我明白为什么.

我们不会在这里找到答案,让我们继续前进.

2: 像油漆一样添加颜色(颜色)(蓝色+黄色=绿色等)

让我们尝试使用本讨论中建议的CMYK值.混合cyanyellow给出green:
http://jsbin.com/igaveg/1/edit
但混合blue使用yellow的结果black.
http://jsbin.com/igaveg/2/edit - >不工作!

3: 如何将"自然"与C#混合使用?
一个非常相似的问题.最受欢迎的答案建议将颜色转换为LAB,这个解决方案似乎很有希望.
所以我将我的颜色转换为LAB.转换算法是正确的,我测试了它!

http://jsbin.com/oxefox/1/edit

现在我在LAB中有两种颜色,但是如何混合呢?

注:我知道,可能我会找不到一个混合算法中blue使用yellow,并给完美的green,但我希望我能够生成类似于绿色的东西:)

javascript math color-scheme colors

30
推荐指数
4
解决办法
2万
查看次数

用于在两个其他之间找到颜色的算法 - 在绘制颜色的颜色空间中

当混合蓝色和黄色涂料时,结果是某种绿色.

我有两种颜色:

blue =(0,0,255)

和黄色=(255,255,0)

找到混合两种颜色的结果的rgb颜色的算法是什么,就像使用涂料时一样?算法产生的颜色不一定非常精确.对于上面的例子,它只需要看起来像某种绿色.

提前致谢.

编辑:这个用Go编写的函数,根据LaC的回答为我工作.

func paintMix(c1, c2 image.RGBAColor) image.RGBAColor { 
    r := 255 - ((255 - c1.R) + (255 - c2.R))
    g := 255 - ((255 - c1.G) + (255 - c2.G))
    b := 255 - ((255 - c1.B) + (255 - c2.B))
    return image.RGBAColor{r, g, b, 255}
}
Run Code Online (Sandbox Code Playgroud)

编辑#2 Allthought它设法混合青色和黄色,蓝色和黄色之间的混合变成黑色,这似乎不对.我还在寻找一种有效的算法.

编辑#3这是Go中一个完整的工作示例,使用HLS颜色空间:http://go.pastie.org/1976031.谢谢Mark Ransom.

编辑#4看起来更好的颜色混合的前进方式是使用Kubelka-Munk方程

algorithm rgb colors go color-space

27
推荐指数
2
解决办法
4417
查看次数

实施像Krita这样的Kubelka-Munk来混合颜色(颜色)如油漆

是否有人知道在哪里可以找到或实现Kubelka-Munk功能以像自然涂料一样混合颜色?Emanuelle Tamponi在开源项目Krita中实现了此功能,但在任何地方都找不到这种或类似方法可以“自然地”混合颜色的功能。可能是商业上敏感或私人的,但如果您不询问,就不会发现!

colors

5
推荐指数
2
解决办法
4957
查看次数