4

そこで、PyCairo を使って画像を描きたいと思います。効率はかなり重要ですが、PyGtk の gtk.gdk.Pixbuf を使用して画像を読み込んでいます。私の質問は、gtk.gdk.CairoContext を介して Cairo コンテキストを取得して Pixbuf をレンダリングする場合と、Pixbuf を cairo.ImageSurface オブジェクトに変換する場合のパフォーマンスの違いはありますか? これは別の描画スレッドで実行され、1 秒間に約 30 回更新されます (ただし、画像の更新が必要な場合のみ)。変換は 1 回だけ実行されることに注意してください。

gdkcr = gtk.gdk.CairoContext(cr)

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

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

1 に答える 1

3

@UliSchlachter が尋ねたように、2 番目のソリューションで ImageSurface を取得するにはどうすればよいですか? .set_source_pixbuf()と が関係しているとしか推測できません.get_source().get_surface()

pixbuf と cairo がメモリにピクセルを格納する方法は同じではない (RGB(A) と ARGB) ため、set_source_pixbuf() はビットをシャッフルしながらピクセルごとに画像をコピーする必要があります。これは比較的高速ですが、それでもコストがかかります。画像が常に同じである場合、ループの外側で変換を 1 回行うのは簡単なはずです。

于 2012-12-19T16:41:40.663 に答える