使用cairo在Python中绘制大量圆形

6
我目前正在开发一个应用程序,它使用视频投影仪创造类似真实激光的效果。通过这个链接here可以看到我试图实现的非常好的示例。
基本上,这个应用程序需要在各种颜色中绘制简单的移动形状。我使用了pycairo进行相当复杂的设置,使得原语通过一组修改器来改变位置、缩放和旋转。这样可以提供很大的灵活性。
不幸的是,pycairo在绘制虚线圆时速度比较慢。我尝试绘制了30个如下所示的圆:
# setup, transforms...
# Example color-scheme:
self._colors = [(0.0, 1.0, 0.0)]
# drawing dashes one after another
for count, color in enumerate(self._colors):
    cr.set_dash(dash_len, self._dash_len * count)
    cr.set_source_rgb(color[0], color[1], color[2])

    cr.arc(0, 0, self.radius(), 0, 2 * math.pi)
    cr.stroke()

整个东西看起来像这样。使用Core2Duo在800x600上不能保持25fps。
有更快的画圆方式吗?质量并不是真正的问题。
感谢您的帮助!

1
你考虑过画n-gons而不是圆吗?这样应该会更快,而且如果N足够高,你不会看到太大的区别。 - Junuxx
1
你也可以尝试关闭抗锯齿等功能。 - Qnan
@Junuxx 我尝试了20边形,它们的速度大致相同。不过你的想法看起来很有前途。 @Qnan 我的设置代码中已经有cr.set_tolerance(0.5)了,还有其他的吗? - Delphinator
你可以在临时表面上绘制圆圈(背景透明!),然后将该临时表面绘制到“屏幕表面”。这样应该避免了一直栅格化圆圈的成本。 - Uli Schlachter
1个回答

5

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