Frage

Ich habe ein Bild / pixbuf, die ich in eine gtk.DrawingArea zeichnen wollen und aktualisieren häufig, so dass der Blitten Betrieb muss schnell sein. Tut es dem einfachen Weg:

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)

führt jedoch zu sehr geringe Leistung, verursachte wahrscheinlich durch die pixbuf nicht in dem Displays Farbformat zu sein.

Ich hatte keinen Erfolg mit Kairo entweder, wie es bis zu 24/32-Bit-Formaten scheint begrenzt und nicht über ein 16-Bit-Format (FORMAT_RGB16_565 wird nicht unterstützt und weiterentwickelt).

Welche Alternativen gibt es Bilder schnell in Gtk +?

Zeichnung
War es hilfreich?

Lösung

Versuchen Pixmap zu schaffen, die die gleiche colormap als Zeichenbereich verwendet wird.

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)

und zeichnen sie auf dem Bildschirm mit

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

Andere Tipps

Sind Sie wirklich nicht genug rohe Geschwindigkeit / Durchsatz zu erzeugen? Oder ist es nur, dass Sie sehen, flackernde?

Wenn es letzteres ist, sollten Sie vielleicht die doppelte Pufferung untersuchen für Ihr Updates statt perfomring? Grundsätzlich ist die Idee zu einem unsichtbaren Puffer zu ziehen, ist dann der Grafikkarte sagt den neuen Puffer zu verwenden.

Vielleicht diese Seite an, die hat einige Informationen über die doppelte Pufferung .

Es kann dabei einiges Benchmarking wert sein - wenn man mit einem kleinen Bereich zieht, ist es immer noch langsam

Wenn es ist, kann es sich lohnen, auf pygtk oder gtk Mailinglisten fragen ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top