使用Cairo绘制GTK Pixbufs的效率问题

4

我想使用PyCairo绘制图像。效率非常重要,但我正在使用PyGtk的gtk.gdk.Pixbuf来加载图像。我的问题是,通过从gtk.gdk.CairoContext检索Cairo上下文来渲染Pixbuf与将Pixbuf转换为cairo.ImageSurface对象在性能上是否有差异?如果有,差异有多大?这在一个单独的绘图线程中运行,大约每秒更新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
你如何将pixbuf转换为cairo.ImageSurface?这不也需要set_source_pixbuf()吗? - Uli Schlachter
1个回答

3
当@UliSchlachter询问时,你是如何在第二种解决方案中得到ImageSurface的?我只能猜测它涉及.set_source_pixbuf()和.get_source().get_surface()。 pixbuf和cairo在存储像素时不同(RGB(A) vs. ARGB),因此set_source_pixbuf()必须逐像素复制图像,并在其中移动位。这相对较快但仍有成本。如果图像始终相同,则应该很容易在循环之外进行一次转换。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接