我正在根据从用户收集的一组点绘制一条CGContext路径。似乎有一些随机输入抖动导致一些线边看起来呈锯齿状。我认为轻微的羽毛可以解决这个问题。如果我使用的是OpenGL ES,我会简单地将一个羽毛应用于我正在用它追踪路径的精灵;但是,这个项目要求我留在Quartz / CoreGraphics中,我似乎无法找到类似的解决方案。
我尝试绘制5条线,每条线稍微大一些,更透明以接近羽毛。这会产生不良结果并显着降低性能。
这是线条图代码:
CGContextMoveToPoint(UIGraphicsGetCurrentContext(),((int)lastPostionDrawing1.x), (((int)lastPostionDrawing1.y)));
CGContextAddCurveToPoint(UIGraphicsGetCurrentContext(), ctrl1_x, ctrl1_y, ctrl2_x, ctrl2_y, lastPostionDrawing2.x, lastPostionDrawing2.y;
[currentPath addCurveToPoint:CGPointMake(lastPostionDrawing2.x-((int)furthestLeft.x)+((int)penSize), lastPostionDrawing2.y controlPoint1:CGPointMake(ctrl1_x, ctrl1_y) controlPoint2:CGPointMake(ctrl2_x, ctrl2_y)];
答案 0 :(得分:2)
我将继续并假设您的CGContext仍然启用了抗锯齿功能,但如果没有,那么这是首先想到的尝试,正如@Davyd的评论所暗示的那样:CGContextSetShouldAntialias
是函数感兴趣的。
假设这不是问题,并且该行正在被上下文消除锯齿,但你仍然想要一些“更软”的东西。我可以想到几种方法来做到这一点,希望比抚摸5次更快。
首先,您可以尝试使用CGContextReplacePathWithStrokedPath
来获取描边路径(即描述当前路径笔划轮廓的路径),然后可以使用渐变(或任何其他填充技术)来填充此路径期望的结果。)这对于直线很有效,但对于弯曲路径不会很简单(因为渐变填充了描边路径的区域,并且将是线性或径向的。)
另一个可能不那么明显的选择,可能就是为了这个目的滥用CG的阴影画。您要查找的功能是:CGContextSetShadowWithColor
以下是方法:
CGContextSaveGState
CGPathCreateCopyByTransformingPath
复制路径,将其从自身平移2.0 * bbox.width(注意:仅使用X方向,这样您无需担心上下文中的翻转)CGContextClipToRect
CGContextSetShadowWithColor
在上下文中设置阴影:
CGContextRestoreGState
这应该让你“只是”阴影,你可以调整,以达到你想要的结果。
所有这一切,CG的阴影绘制性能,IME,不是完全令人敬畏,而不是完全确定性。我希望它比用5个不同的笔画抚摸路径5次更快,但不是绝对的。
这取决于实现这种效果对你有多大价值。