45 votes

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

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

blue + yellow = green 
blue + red = purple

et ainsi de suite. J'ai obtenu les couleurs sous forme de valeurs RVB. Lorsque j'essaie de les mélanger, j'obtiens les bons résultats "RVB" comme

green + red = yellow
yellow + blue = white

mais pas les bons résultats de "peinture humide naturelle". Avez-vous une bonne idée pour mélanger les couleurs RVB de manière naturelle ?

Ce serait formidable si quelqu'un connaissait une solution dans le cadre de la Microsoft.Xna.Framework.Graphics mais une solution générique serait également utile :)

46voto

Jason Cohen Points 36475

"Peinture humide naturelle" est un peu ambiguë ; le mélange de CMYK tel qu'il est suggéré ne fonctionnera pas car vous ajoutez toujours des couleurs.

Si vous voulez des résultats comme dans Photoshop (comme l'a vérifié Jon B), vous devez utiliser l'espace L*a*b*. Formules pour convertir RGB en/depuis Lab et une description est ici .

L'espace du laboratoire a été spécifiquement 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 qu'aux autres couleurs, parce que nous percevons les changements différemment selon la teinte et la luminosité, etc.

Les autres méthodes proposées actuellement donneront non seulement des couleurs que vous ne voulez pas, mais ne représenteront pas un changement de couleur "d'apparence constante", surtout si vous l'utilisez pour quelque chose où le changement constant est important, comme un dégradé.

18voto

Mark Cidade Points 53945

Il existe un bon article sur la conversion de RGB en L*a*b en C# à l'adresse suivante http://www.codeproject.com/KB/recipes/colorspace1.aspx .

4voto

crono Points 1626

@Jay Bazuzi :

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

Bien sûr - c'est ma fonction pour mélanger les 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 en L*a*b*, les mélanger - les reconvertir en RGB et renvoyer cette couleur.

3voto

Bart Points 2690

Vous obtenez gratuitement la conversion cmyk<->rgb avec WIC . mais il s'agit de .NET 3.0 seulement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X