1

カイロの描画を最適化したい。その上にカイロのグラフィックが描かれた不変の背景があります。背景はクラスのインスタンスごとに異なる可能性があるため、静的ファイルにすることはできません。背景を描画するには、次のようなことをしたいと思います。

    if self.pixbuf is None:
        self.pixbuf = self.draw_background(cr, width, height)
        #self.pixbuf = gtk.gdk.pixbuf_new_from_file("/path/to/file.png")

    cr.set_source_pixbuf(self.pixbuf, 0, 0)
    cr.paint()

背景を一度だけ作成してから、それを画像として表示し、その上に物を描くようにします。これは、誰かが変更するたびに変更されていない背景全体を再描画する代わりに、時間を節約するためです。コメントアウトされたコード行は正常に機能しますが、png を作成して一時ファイルに保存し、そのファイルをロードしたくありません。IOの無駄のようです。

私はこれを試しました:

self draw_background (self, cr, width, height)
    pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, True, 8, int(width), int(height))

    cr.set_source_color(gtk.gdk.color_parse('black'))
    cr.set_line_width(2)
    cr.rectangle(0, 0, width, height)
    cr.stroke()

    cr.paint()
    return pixbuf

ただし、背景は表示されません。

私は何を間違っていますか?

4

1 に答える 1

1

Uli が指摘したように、pixbuf ではなく、ウィジェットをターゲットとして指すコンテキストで描画しています。pixbuf の新しい cairo コンテキストを作成するには、cairo_createを使用します。描き終わったら忘れずに破棄してください。

于 2013-03-01T11:02:05.123 に答える