0

如何在调用 stroke() 或 fill() 后复制路径?我已经设置了一个看起来像这样的缓存机制

高端视觉对象类:

override void DrawDirect(canvas aCanvas)
{
    aCanvas.Line(...)
    aCanvas.Rectangle(...)
    // etc. 
    MyCache = aCanvas.GetPath(); // = canvas.Context.copy_Path()
    IsCached = true;
}

override void DrawCache(canvas aCanvas)
{
    aCanvas.DrawPath(MyCache); // = canvas.Context.appendPath...
}

超类有这个方法:

voidDraw(canvas aCanvas)
{
    if(IsCached) DrawCache();
    else DrawDirect;
}

画布定义了这种方法:

void Line(...)
{
    Context.moveTo(...)
    Context.lineTo(...)
    Context.stroke();
}

当我调用 GetPath 时,MyCache.numData 等于 0,除非我注释对 stroke() 和 fill() 的调用。但作为副作用,DrawDirect 方法(在视觉上)什么也不做。

另一个后续问题是:调用 appendPath (真的)比调用基本的“直接”方法更快吗?(您可以对此发表评论,我只会接受有关 copy_Path 内容的答案)。

4

1 回答 1

0

Cairo 有 stroke() 删除描边后的路径和 stroke_preserve() 不接触路径并保持原样。

我真的不知道 appendPath() 是否比直接重新创建路径更快,但我真的无法想象这样的事情应该是一个性能问题。无论如何,这可能取决于您的路径,您应该自己进行基准测试。

于 2013-08-18T18:21:31.767 回答