¿Cómo mezclar colores “naturalmente” con C #?

Tengo que mezclar algunos colores de forma natural. Esto significa

blue + yellow = green blue + red = purple 

Y así. Obtuve los colores como RGB-Values. Cuando bash mezclarlos obtengo los resultados “RGB” correctos

 green + red = yellow yellow + blue = white 

Pero no los resultados correctos de “pintura húmeda natural”. ¿Alguna buena idea de cómo mezclar RGB de forma natural?

Sería genial si alguien supiera una solución dentro del espacio de nombres Microsoft.Xna.Framework.Graphics pero una solución genérica también ayudaría 🙂


@Jay Bazuzi:

Por favor, publique una muestra de código que muestre lo que está tratando de hacer.

Claro, esta es mi función para mezclar los dos colores 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)); } 

Lo que he leído hasta ahora en este hilo es muy prometedor: convertiré C1 y C2 en L a b *, los mezclaré, los convertiré a RGB y devolveré ese color.

La “pintura húmeda natural” es un poco ambigua; la mezcla de CMYK como se sugiere no funcionará porque aún está agregando colores.

Si quiere resultados como en Photoshop (como Jon B comprobado), necesita usar L * a * b * espacio. Fórmulas para convertir RGB a / de Lab y una descripción aquí .

El espacio de laboratorio se diseñó específicamente para que los cambios lineales correspondan a lo que el ojo humano percibe como una cierta cantidad de cambio de color. Esto es importante porque, por ejemplo, somos más sensibles al verde que otros colores, porque percibimos los cambios de manera diferente dependiendo del tono y la claridad, etc.

Probar cualquier otro método actualmente sugerido no solo dará como resultado colores que no desea, sino que tampoco representará un cambio de color de “apariencia constante”, especialmente si utiliza esto para algo donde el cambio constante importa como un degradado. .

Hay un buen artículo para convertir RGB a L a b en C # en http://www.codeproject.com/KB/recipes/colorspace1.aspx .

Obtiene la conversión cmyk <-> rgb de forma gratuita con WIC . pero solo es .NET 3.0