在调用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时,除非我对stroke()和fill()的调用进行注释,否则MyCache.numData等于0。 但作为副作用,DrawDirect方法(视觉上)没有任何效果。
另外一个后续问题是:调用appendPath(真的)比调用基本的“直接”方法更快吗? (你可以对此发表评论,我只会接受有关copy_Path内容的答案)。
答案 0 :(得分:0)
开罗有一个stroke(),它会在抚摸之后删除路径,而stroke_preserve()不会触及路径并保持原样。
我真的不知道appendPath()是否比直接重新创建路径更快,但我真的无法想象这样的事情应该是性能问题。这可能取决于你的路径,你应该自己做基准测试。