web-dev-qa-db-fra.com

Comment mélanger les couleurs "naturellement" avec C #?

Je dois mélanger certaines couleurs de manière naturelle. Ça signifie

blue + yellow = green 
blue + red = purple

Etc. J'ai eu les couleurs comme des valeurs rgb. Quand j'essaie de les mélanger, j'ai eu le droit "rgb" -results comme

green + red = yellow
yellow + blue = white

Mais pas la droite "peinture naturelle-humide" -results. Toute bonne idée de mélanger RVB de manière naturelle?

Ce serait génial si quelqu'un connaissait une solution dans la Microsoft.Xna.Framework.Graphics Espace de noms, mais une solution générique aiderait également :)


@Jay Bazuzi:

Veuillez poster un échantillon de code qui montre ce que vous essayez de faire.

Bien sûr, c'est ma fonction de mélange des deux couleurs 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));
}

Ce que j'ai lu jusqu'à présent dans ce fil est très prometteur - je vais convertir C1 et C2 à L ---a B *, mélangez-les - convertissez-le à RVB et retourne cette couleur.

45
crono

"Peinture humide naturelle" est un peu ambigu; Le mélange de CMJN comme suggéré ne fonctionnera pas car vous ajoutez toujours des couleurs.

Si vous souhaitez des résultats comme dans Photoshop (comme cochés Jon B), vous devez utiliser L * A * B * espace. Formules pour la conversion de RVB vers/depuis Laboratoire et une description est ici .

L'espace de laboratoire a été spécialement conçu pour que les changements linéaires correspondent à ce que l'œil humain perçoit comme une certaine quantité de changement de couleur. Ceci est important parce que par exemple. Nous sommes plus sensibles au vert que les autres couleurs, car nous percevons des changements différemment en fonction de la teinte et de la légèreté, etc.

Essayer d'autres méthodes actuellement suggérées entraînera non seulement des couleurs que vous ne voulez pas, mais ne représentent pas non seulement un changement de couleur "à la recherche constante", surtout si vous utilisez ceci pour quelque chose où il s'agit d'un changement de vitesse constant comme un gradient .

46
Jason Cohen

Il y a un bon article pour convertir RVB en L A B en C # à http://www.codeproject.com/kb/recipes/colorspace1.aspx .

18
Mark Cidade

Vous obtenez une conversion de CMYK <-> RVB gratuitement avec WIC mais c'est .net 3.0 seulement

3
Bart