2010-04-17 62 views
2

如何平滑线条(UIBeizerPath)或一组点?现在它把它画成锯齿状。我阅读了样条插值,任何人都可以指示我在可可或C中实现这个,或者给我一个备用线条平滑算法。Cocoa Touch中的线条平滑

回答

1

石英(UIKit用于绘制,并且在很多地方可以直接用于绘图)具有内置的抗锯齿支持。大多数情况下它已经开启了,所以除非你打开anti-aliasing,否则你不应该有别名(锯齿状)绘图。所以,停止这样做。 :-)

默认情况下没有打开它的上下文大多是那些不合适的上下文,例如PDF上下文和CGLayer上下文。 The documentation意味着这些上下文甚至不支持抗锯齿,这会产生一定的意义。

CGContext提供了一些用于开启和关闭消除锯齿功能的函数,但除非需要别名,否则不应该调用它们。您可以尝试使用这些功能将其打开;如果这有效,那么你应该首先调查为什么它永远关闭。

您是从CALayer内绘制路径吗?这可能是为什么它关闭了; there's an Info.plist key you have to turn on to get anti-aliasing turned on by default in such contexts

+0

没有那种锯齿。反锯齿正在工作,但我需要从某种算法中进行总线平滑。 – 2010-04-17 04:56:24

+0

一张图片价值10^3字... – Meltemi 2010-04-17 14:42:08

2

我不认为你需要用曲线做Bezier路径。您可以继续绘制直线段,但可以使用插值添加更多数据点。这一点尤其重要,因为我假设你只想在一个坐标轴上平滑,所以最终不会像图中的循环那样出现奇怪的现象。

因此,您想要在现有点之间添加更多点到源数据,并使用比线性插值更复杂的插值算法。有很多可供选择的。二次?基于正弦波?很多,这取决于你使用的是什么样的数据。

1

我发现,如果您在画面边缘画一条线或一个图像,它会出现锯齿状。移动一些线(或增加你的框架),它应该看起来很好,很脆。再次,不知道这是否是你的问题,但它已经咬了我几次。

例如,如果您要在CALayer中显示图像,请确保图像和框架之间存在空间,如果您只做了90度角度的任何操作。