2011-01-14 7 views
0

J'utilise pygtk et caire (... merveilleux choses que je dois dire. Merci à tous)dessin partie d'une image sur une surface cairo

Je me demande comment présenter des parties d'images sur ma ma surface caire sur un grand dessin.

Je voudrais avoir des zones dans la surface affichée qui semblent agir clipsé pour que je puisse faire défiler les images à travers ces zones sans perturber les éléments dessinés environnants. Est-ce que je peux couper des images pour le dessin de pièces sur une surface ou dois-je juste obtenir la séquence de dessin dans le bon ordre de sorte que les images devant être découpées soient superposées et masquées si nécessaire et apparaissent tronquées?

merci pour tous les pointeurs

nick

+0

essayant d'obtenir plus d'informations en attendant/espérant quelques conseils ... je suis après quelque chose le long des lignes d'un opérateur de cairo comme OPERATOR_IN? Je ne peux pas trouver de détails sur l'utilisation de tels pour me trouver où je veux ... – nick

Répondre

1

Le Caire est en effet merveilleux! ctx.clip() est une façon de le faire, en utilisant un masque (ci-dessous en seulement pycairo, où le rectangle de tirage final ne touche que la zone découpée triangulaire).

Vous pouvez également utiliser un mode de transfert de CAIRO_OPERATOR_OUT (je pense), mais je suis moins familier avec les modes de transfert. Et cela ne fonctionnerait que sur le premier tirage, puisque votre contenu remplirait un peu l'alpha.

(Votre suggestion de « Peinture commande » fonctionne très bien, aussi, bien sûr!)

import cairo 

WIDTH, HEIGHT = 256, 256 

surface = cairo.ImageSurface (cairo.FORMAT_ARGB32, WIDTH, HEIGHT) 
ctx = cairo.Context (surface) 

ctx.rectangle(0,0,300,300) 
ctx.set_source_rgb(0,0,0) 
ctx.fill() 

ctx.move_to(0,0) 
ctx.line_to(200,90) 
ctx.line_to(90,200) 
ctx.line_to(0,0) 
ctx.close_path() 
ctx.clip() 

ctx.rectangle(0,0,300,300) 
ctx.set_source_rgb(1,1,0) 
ctx.fill() 

surface.write_to_png("clipped.png") 
Questions connexes