8

gtk.DrawingArea に描画して頻繁に更新するイメージ/pixbuf があるため、ブリッティング操作は高速である必要があります。簡単な方法でそれを行う:

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)

ただし、pixbuf がディスプレイのカラー形式ではないことが原因で、パフォーマンスが非常に低下する可能性があります。

Cairo でも 24/32 ビット フォーマットに限定されているようで、16 ビット フォーマットがないため、成功しませんでした (FORMAT_RGB16_565 はサポートされておらず、非推奨です)。

Gtk+ ですばやく絵を描くための代替手段はありますか?

4

3 に答える 3

7

描画領域と同じカラーマップを使用するPixmapを作成してみてください。

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)

を使用して画面に描画します

dr_area.window.draw_drawable(self.gc, self.image, 0, 0, x, y, *self.image.get_size())
于 2009-06-07T06:29:24.300 に答える
2

本当に十分な生の速度/スループットを生成していませんか? それとも、ちらつきが見られるだけですか?

後者の場合は、代わりに更新を実行するためにダブル バッファリングを調査する必要がありますか? 基本的には、目に見えないバッファに描画してから、グラフィック カードに新しいバッファを使用するように指示するという考え方です。

ダブルバッファリングに関する情報があるこのページをチェックしてみてください。

于 2009-06-06T20:46:53.553 に答える
0

ベンチマークを行う価値があるかもしれません - 小さな領域で描画しても遅いですか?

そうであれば、pygtk または gtk メーリング リストで質問する価値があるかもしれません...

于 2009-08-17T10:03:00.277 に答える