【问题标题】:Efficiency of Drawing GTK Pixbufs with Cairo使用 Cairo 绘制 GTK Pixbuf 的效率
【发布时间】:2012-10-23 18:22:08
【问题描述】:

所以,我想使用 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()

【问题讨论】:

  • 如何将 pixbuf 转换为 cairo.ImageSurface?那不是也需要 set_source_pixbuf() 吗?

标签: python gtk pygtk cairo pycairo


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-21
    • 2012-01-07
    • 2016-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多