Cocoa Touch中的线条平滑

时间:2010-04-17 03:15:21

标签: iphone objective-c cocoa-touch uikit

如何平滑线条(UIBeizerPath)或一组点?现在它把它描绘成锯齿状。我读到了关于样条插值的问题,有没有人能指出我在cocoa或C中实现这个,或者给我一个替代线平滑算法。

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

Quartz(UIKit用于绘图,在许多地方使您直接用于绘图)内置了抗锯齿支持。大多数情况下它已经打开,所以你不应该使用别名(锯齿状)绘图,除非你关闭反锯齿。所以,停止这样做。 : - )

默认情况下没有启用它的上下文主要是那些不合适的上下文,例如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

答案 2 :(得分:1)

我发现如果你在画面的边缘画一条线或一个图像,它会出现锯齿状。移动一些线(或增长你的框架),它应该看起来漂亮和清脆。再一次,不确定这是不是你的问题,但它有点困扰我几次。

例如,如果您在CALayer中显示图像,请确保图像和框架之间有空间,如果您正在做90度角以外的任何操作。