2012-11-03 2 views
3

Donc, je veux dessiner une image en utilisant PyCairo. L'efficacité est assez importante, mais je charge les images en utilisant gtk.gdk.Pixbuf de PyGtk. Ma question est la suivante: y a-t-il une différence de performance entre rendre Pixbuf en récupérant un contexte de Cairo via gtk.gdk.CairoContext et convertir le Pixbuf en objet cairo.ImageSurface, et si oui, quelle est la différence? Ceci est exécuté dans un thread de dessin distinct qui est mis à jour 30 fois par seconde environ (mais uniquement lorsque l'image doit être mise à jour). Notez que la conversion ne sera exécutée qu'une seule fois.Efficacité de dessin GTK Pixbufs avec Cairo

gdkcr = gtk.gdk.CairoContext(cr) 

gdkcr.set_source_pixbuf(img, 0, 0) 
gdkcr.paint() 

vs

cr.set_source(imgSurface) 
cr.rectangle(0, 0, imgSurface.get_width(), imgSurface.get_height()) 
cr.fill() 
+1

Comment convertir le pixbuf en un cairo.ImageSurface? Ne faudrait-il pas aussi set_source_pixbuf()? –

Répondre

3

Comme @UliSchlachter a demandé, comment obtenez-vous un ImageSurface dans votre deuxième solution? Je peux seulement deviner que cela implique .set_source_pixbuf() et .get_source().get_surface(). La façon dont pixbuf et cairo stockent les pixels en mémoire n'est pas la même (RGB (A) vs ARGB), donc set_source_pixbuf() doit copier l'image pixel par pixel tout en mélangeant les bits. Ceci est relativement rapide mais a toujours un coût. Si l'image est toujours la même, il devrait être facile de faire la conversion une fois, en dehors de la boucle.

Questions connexes