4

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

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 所问,如何在第二个解决方案中获得 ImageSurface?我只能猜测它涉及.set_source_pixbuf().get_source().get_surface()

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

于 2012-12-19T16:41:40.663 回答