2012-11-03 22 views
3

所以,我想使用PyCairo繪製圖像。效率非常重要,但我使用PyGtk的gtk.gdk.Pixbuf加載圖像。我的問題是,在通過gtk.gdk.CairoContext將Pixbuf轉換爲cairo.ImageSurface對象的過程中檢索Cairo上下文來呈現Pixbuf時,在性能上會出現性能差異,如果是這樣,它有多大的區別?這是在單獨的繪圖線程中運行,每秒更新30次(儘管只在圖像需要更新時)。請注意,轉換隻能運行一次。使用開羅繪製GTK Pixbufs的效率

gdkcr = gtk.gdk.CairoContext(cr) 

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

VS

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

你會如何將pixbuf轉換成cairo.ImageSurface?那也不需要set_source_pixbuf()嗎? –

回答

3

由於@UliSchlachter問,你如何讓你的第二個解決方案的ImageSurface?我只能猜測它涉及.set_source_pixbuf().get_source().get_surface()。 (RGB(A)與ARGB)不同,所以set_source_pixbuf()必須在混洗位的同時以像素爲單位複製圖像。這是相對快速但仍有成本。如果圖像總是相同的,那麼在循環之外進行一次轉換應該很容易。