2017-09-20 4 views
0

Je suis en train de dessiner sur une image en utilisant un modèle, l'image modèle est la suivanteGo dessiner sur l'image masque

enter image description here

Je veux coloriser l'image couleurs rouge, vert, bleu et jaune avec couleurs personnalisées et de réaliser quelque chose comme ceci:

enter image description here

pour y parvenir, j'utilise actuellement cette image comme base

enter image description here

Et puis dessiner sur le modèle en utilisant draw.Draw(outfitImage, outfitImage.Bounds(), generatorImage, image.ZP, draw.Over)

Cela donne cependant un résultat très bizarre (rien à proximité du résultat attendu), voici comment je remplace pixels

func paintPixels(img *image.NRGBA, base color.Color, dst color.Color) { 
    br, bg, bb, ba := base.RGBA() 
    dr, dg, db, _ := dst.RGBA() 
    for x := 0; x < img.Bounds().Dx(); x++ { 
     for y := 0; y < img.Bounds().Dy(); y++ { 
      r, g, b, a := img.At(x, y).RGBA() 
      if br == r && bg == g && bb == b && ba == a { 
       img.Set(x, y, color.RGBA{uint8(dr), uint8(dg), uint8(db), 255}) 
      } 
     } 
    } 
} 

enter image description here

Le résultat peut varier en fonction de la valeur alpha utilisée lors de la coloration du modèle d'image. Donc, je ne peux pas penser à un moyen d'atteindre le résultat attendu, je suppose que je devrais utiliser un masque avec draw.DrawMask mais je n'ai aucune idée par où commencer ou comment atteindre le résultat que je cherche

Répondre

1

Vous ressemblez à vous il suffit de remplacer les pixels par la couleur si tous les composants correspondent. Si vous regardez les méthodes de compositing dans bild/blend vous devriez trouver celui qui vous convient pour combiner des images - vous voulez probablement modes Opacité ou multiplier et pourrait extraire le code de ce fichier:

https://github.com/anthonynsimon/bild/blob/master/blend/blend.go