使用cython

时间:2017-05-19 09:18:59

标签: python cython pycairo

我正在编写一个python程序来做图形动画,我正在使用python cairo / rsvg库。我已达到速度问题,并希望通过在cython库中移动一些渲染代码来加速代码的某些部分。

理想情况下,我想扩充cairo库方法,添加一些针对我的需求进行优化的方法。

例如我有一个函数在屏幕上绘制一个svg,其中心点是一个带有强制其大小的边界框的点,通常这个函数由一个外部循环调用,该循环绘制了数十个svgs,而这个函数是其中一个我的代码中最贵的:

def svg(ctx, path, pos, angle, width, height):
    """Draws an svg file at coordinates pos with at a specific angle, and a
    maximum bounding box of size width x height"""
    if width == 0 or height == 0:
        return

    svg = rsvg.Handle(file=path) #any svg file

    ctx.save()

    #put in position
    ctx.translate(pos.x, pos.y)

    #rotate
    ctx.rotate(angle)

    #resize
    if svg.props.width != width or svg.props.height != height:
        ratiow = (width *1.0) / (svg.props.width*1.0)
        ratioh = (height * 1.0) / (svg.props.height * 1.0)
        ctx.scale(ratiow, ratioh)

    #move center to 0,0 of image
    ctx.translate(-svg.props.width / 2, - svg.props.height / 2)

    #draw image
    svg.render_cairo(ctx)
    ctx.restore()

我想要做的是编写一个cython函数,给出svgs列表会在屏幕上一次性绘制它们。

这种优化可以用cython完成吗? 根据我的理解,为cairo上下文对象(ctx)定义一个类型是非常有益的,但是如何正确地进行呢?

0 个答案:

没有答案