Voici le code que je utilise en ce moment:Cairo (w/Python): Est-il possible de remplir un polygone avec une ligne transparente?
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, *image.size)
context = cairo.Context(surface)
context.set_source_rgba(1, 1, 1, 1)
context.new_path()
for i in xrange(len(points)):
context.line_to(*points[i])
context.close_path()
context.fill()
Le problème est qu'il remplit le polygone avec la même couleur que je dessine. J'ai essayé de dessiner un nouveau polygone sur celui-ci et de faire juste context.stroke()
au lieu de fill()
mais cela ne fonctionne que si j'utilise une couleur différente, sinon la couleur blanche est sous. J'ai essayé avec (0,0,0,0)
donc ce serait transparent, mais alors le blanc est en dessous.
Je peux dessiner une ligne de couleur (par exemple (0.5,0.5,0.5,1)
), enregistrez-le sur une image avec write_to_png
, chargez avec PIL, convertir en numpy.array et remplacer chaque pixel avec la bonne couleur avec la couleur d'arrière-plan (0, 0, 0, 0)
, mais ce n'est pas efficace.
J'ai également essayé de définir la largeur de ligne à 0 et cela ne fonctionne pas non plus.
Aussi, je vais bien avec d'autres méthodes qui me permettent de faire ce qui ne sont pas le Caire. J'ai essayé le polygon
d'ImageDraw mais il ne dessine pas la forme exacte (je ne suis pas sûr de savoir comment l'expliquer, mais il attire en quelque sorte des pixels supplémentaires à l'extérieur du polygone), ainsi ImageDraw n'aidera pas moi.
Je ne comprends pas exactement ce que vous voulez. On ne "remplit" pas une forme avec une "ligne" - que voulez-vous faire? Si vous voulez juste le contour du polygone, essayez d'utiliser ".stroke()" au lieu de ".fill()". Si vous souhaitez que la couleur de dessin soit transparente, utilisez des valeurs intermédiaires pour Alpha (le 4ème composant sur la couleur - vous le définissez toujours sur 1) – jsbueno
lorsque j'utilise le remplissage, trace un contour sur le polygone. Je ne veux pas ce contour/ligne. – pppphhhhuuuu