2017-03-09 1 views
0

J'essaie de remplacer la couleur blanche par du vert, mais le code ci-dessous ne change pas de couleur.Impossible de remplacer la couleur par Magick.Net

code:

private static MagickImage ChangeWhiteColor(MagickImage Image, Color TargetColor) 
{ 
    Image.Opaque(MagickColor.FromRgb((byte)255, (byte)255, (byte)255), 
     MagickColor.FromRgb(TargetColor.R, 
     TargetColor.G, 
     TargetColor.B)); 
    return Image; 
} 

UPD J'ai essayé de changer la gravité composite et l'opérateur, mais rien ne change.

Que dois-je faire?

+1

Votre question peut-elle être plus détaillée? Incluez ce que vous avez essayé et les résultats. –

+1

Je ne connais pas Magick.Net mais vous devez trouver le paramètre 'fuzz' et ajouter du fuzz avant le remplacement car les couleurs ne sont pas précises - en particulier avec les fichiers JPEG avec perte, donc si vous autorisez 20% de marge d'erreur avec certaines fuzz , alors vous obtiendrez probablement le résultat que vous cherchez. –

+0

J'ai essayé votre code avec une image contenant un carré rouge (R = 255, G = 0, B = 0) et cela a fonctionné. Etes-vous sûr que la couleur que vous voulez remplacer dans l'image tournée est un "parfait" 255,0,0, rouge? – Andrea

Répondre

2

Votre code fonctionne si vous devez remplacer une couleur parfaitement blanche (R = 255, G = 255, B = 255 ou #ffffff si vous préférez).

Si vous essayez de remplacer une couleur similaire (mais pas exactement identique) par du blanc, vous pouvez utiliser ColorFuzz pour introduire une tolérance.

Pour ce faire, vous pouvez ajouter un nouveau paramètre fuzz à votre méthode qui devrait ressembler à ceci:

private static MagickImage ChangeWhiteColor(MagickImage Image, Color TargetColor, int fuzz) 
{ 
    Image.ColorFuzz = new Percentage(fuzz); 
    Image.Opaque(MagickColor.FromRgb((byte)255, (byte)255, (byte)255), 
     MagickColor.FromRgb(TargetColor.R, 
     TargetColor.G, 
     TargetColor.B)); 
    return Image; 
} 

Considérons par exemple l'image qui contient trois rectangles blancs. Sous chaque forme j'ai rapporté les valeurs RVB. Le premier rectangle sur la gauche est rempli de couleur blanche pur, tandis que le second et le troisième sont remplis de gris très légers qui sont très similaires à la couleur blanche:

enter image description here

Votre code d'origine ne remplacera la premier rectangle blanc sur la gauche (puisque la valeur par défaut de fuzz est de 0%):

enter image description here

Exécution du code modifié avec fuzz=2 remplacera le premier et le second rectangle blanc, mais pas le troisième:

enter image description here

Exécution du code modifié avec fuzz=6 remplacera tous les trois rectangles blancs:

enter image description here

Vous pouvez régler la valeur fuzz (pourcentage) afin de faire correspondre les couleurs que vous avez à remplacer.

Plus d'infos sur fuzz here.