石英 2D 锯齿线

Posted

技术标签:

【中文标题】石英 2D 锯齿线【英文标题】:Quartz 2D jagged lines 【发布时间】:2014-04-05 19:31:16 【问题描述】:

查看我的绘画应用程序产生的这条奇怪的路径:

中间的红线是调试功能,代表输入鼠标移动和它们之间的距离,线宽为 1 px,黑色是输出,线宽为 30 px。

我绘制这个的方式很简单,只是合并鼠标事件之间的点对点:

//This is called in mouseDragged: and [theEvent locationInWindow] is passed to point
-(void)addPointToCurrentStroke:(CGPoint)point 

if (self.newStroke == TRUE) //If the currentStroke doesn't exist or is empty

   self.currentStroke = CGPathCreateMutable();
   CGPathMoveToPoint(self.currentStroke, NULL, point.x, point.y);
   self.newStroke = FALSE;


else if (self.newStroke == FALSE)
    CGPathAddLineToPoint(self.currentStroke, NULL, point.x, point.y);

然后使用适当的用户设置在 drawRect: 中描边该路径,在本例中为 30 大小和黑色。请注意圆形线帽,这使得它像那样突出更奇怪。

那么,为什么这些尖刺会从预期的路径伸出这么远呢?我无法对它做出正面或反面。如果有人能告诉我这里发生了什么,我将不胜感激。

【问题讨论】:

类似问题:"Joined lines at certain angles have pointed vertexes instead of rounded"、"UIBezierPath round edges?"。 【参考方案1】:

您的 CG 上下文设置为在路径的每个角落使用斜接。当那个角落有一个小角度时,斜接可以伸出很远的距离。请改用CGContextSetLineJoin 指定圆形连接或斜角连接。

请参阅Quartz 2D Programming Guide, "Parameters That Affect Stroking"。

【讨论】:

感激不尽!现在我的台词终于看起来正常了……我可以继续做更令人兴奋的事情了!

以上是关于石英 2D 锯齿线的主要内容,如果未能解决你的问题,请参考以下文章

石英 2D 或 OpenGL ES?从长远来看的利弊,迁移到其他平台的可能性

Unity 2D 瓦片地图有锯齿或毛刺的解决办法

在 Löve2D 中使用四边形关闭抗锯齿

怎样用php设置干扰线生成带锯齿的图

各路大神DrawNode绘制的线锯齿太严重怎么解决

Python中的锯齿线