【问题标题】:Double buffering and scrolling with Cairo (pygobject)使用 Cairo (pygobject) 进行双重缓冲和滚动
【发布时间】:2021-09-25 22:42:16
【问题描述】:

我正在使用cairopygobject 来绘制Gtk.DrawingArea

绘图很昂贵,所以我首先绘制到cairo.ImageSurface,然后将其用作绘图事件回调中的绘图源。仅在需要时更新绘图。

现在假设我要将图像向左移动,即复制到自身但已翻译,在右侧添加新内容。

123456789->456789NEW

我认为不可能直接这样做。

我想出的一种解决方法是拥有两个ImageSurface,并在每个滚动副本中从一个滚动复制到另一个并切换位置。

类似:

cr = cairo.Context(buffer_aux)
cr.set_source(buffer)
cr.translate(dx, dy)
cr.paint()
cr.flush()
buffer, buffer_aux = buffer_aux, buffer

如果我错过了什么,那是正确的方法吗?

【问题讨论】:

    标签: python cairo


    【解决方案1】:

    我认为不可能直接这样做。

    正确。对于这种说法,我没有任何来源可以指出,但我认为在开罗自我复制是被禁止的。

    在 cairo 有一个测试用例对此进行了测试,但有人告诉我它只存在,因为曾经有一个无限循环。所以,这个测试实际上是测试“完成并且没有崩溃”并且不检查生成的渲染。

    【讨论】:

      猜你喜欢
      • 2011-02-20
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-15
      • 2011-04-09
      • 2011-09-26
      • 2018-09-14
      相关资源
      最近更新 更多