Domanda

Ho un'immagine / pixbuf che voglio disegnare in un gtk.DrawingArea e aggiornare frequentemente, quindi l'operazione di copiarlo sul video deve essere veloce. Farlo nel modo più semplice:

def __init__(self):
  self.drawing_area = gtk.DrawingArea()
  self.image = gtk.gdk.pixbuf_new_from_file("image.png")

def area_expose_cb(self, area, event):
  self.drawing_area.window.draw_pixbuf(self.gc, self.image, 0, 0, x, y)

Tuttavia porta a prestazioni molto lenta, probabilmente causato dalla pixbuf non essere nel formato display a colori.

Non ho avuto successo con Il Cairo o, come sembra limitato a 24 formati / 32bit e non hanno un formato a 16 bit (FORMAT_RGB16_565 non è supportato e deprecato).

Quali alternative ci sono per disegnare immagini rapidamente in Gtk +?

È stato utile?

Soluzione

Prova a creare Pixmap che utilizza la stessa mappa di colori come area di disegno.

dr_area.realize()
self.gc = dr_area.get_style().fg_gc[gtk.STATE_NORMAL]
img = gtk.gdk.pixbuf_new_from_file("image.png")
self.image = gtk.gdk.Pixmap(dr_area.window, img.get_width(), img.get_height())
self.image.draw_pixbuf(self.gc, img, 0, 0, 0, 0)

e il disegno allo schermo usando

dr_area.window.draw_drawable(self.gc, self.image, 0, 0, x, y, *self.image.get_size())

Altri suggerimenti

Stai davvero non generando abbastanza grezzo velocità / rendimento? O è solo che si sta vedendo tremolante?

Se è quest'ultimo, forse si dovrebbe indagare il doppio buffering per perfomring gli aggiornamenti, invece? In sostanza l'idea è quella di attirare a un buffer invisibile poi dire la scheda grafica per utilizzare il nuovo buffer.

Forse verificare questa pagina che ha un po ' informazioni sul doppio buffering .

Può valere la pena fare un po 'di benchmarking -? Se si disegna con una piccola area è ancora lento

Se lo è, potrebbe essere la pena chiedere su liste PyGTK o mailing gtk ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top