2010-04-17 26 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度角度的任何操作。