所以,我想用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()
答案 0 :(得分:3)
正如@UliSchlachter所问,你如何在第二个解决方案中获得ImageSurface?我只能猜测它涉及.set_source_pixbuf()
和.get_source().get_surface()
。
pixbuf和cairo在内存中存储像素的方式不一样(RGB(A)与ARGB),因此set_source_pixbuf()必须逐个像素地逐像素地复制图像。这相对较快但仍然有成本。如果图像始终相同,则应该很容易在循环之外进行一次转换。