用开罗绘制GTK Pixbufs的效率

时间:2012-11-03 05:31:28

标签: python gtk pygtk cairo pycairo

所以,我想用PyCairo绘制一个图像。效率非常重要,但我使用PyGtk的gtk.gdk.Pixbuf加载图像。我的问题是,通过gtk.gdk.CairoContext检索开发上下文与将Pixbuf转换为cairo.ImageSurface对象来呈现Pixbuf是否存在性能差异,如果是这样,它有多大差异?这是在一个单独的绘图线程中运行,每秒更新30次左右(尽管只在图像需要更新时)。请注意,转换只会运行一次。

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 个答案:

答案 0 :(得分:3)

正如@UliSchlachter所问,你如何在第二个解决方案中获得ImageSurface?我只能猜测它涉及.set_source_pixbuf().get_source().get_surface()

pixbuf和cairo在内存中存储像素的方式不一样(RGB(A)与ARGB),因此set_source_pixbuf()必须逐个像素地逐像素地复制图像。这相对较快但仍然有成本。如果图像始终相同,则应该很容易在循环之外进行一次转换。