2017-06-18 17 views
1

我正在研究一個基於矢量的移動應用程序。首先,我已經開始使用多邊形來表示曲線。不過,我很快就達到了手機上的Polygon Limit。爲了克服這個限制,我開始使用紋理並着色像素。儘管這是一個非常簡單的解決方案,但我受到紋理和操作的最高分辨率的限制。如何在移動設備上高效地繪製矢量曲線?

我發現的唯一有希望的事情是OpenVG,但它好像不是很受歡迎。

那麼如何創建手機矢量繪圖應用程序?我被Adobe Illustrator mobile震撼了,它似乎能夠在矢量圖形中繪製無限的曲線/線條。

回答

0

允許基於矢量的自由曲線繪製的一種可能方法是使用Bézier curves。貝塞爾曲線通過插值由起點,終點和任意數量的控制點定義的值來構造。這樣可以從一組笛卡爾點構造一個自由曲線曲線。

這樣做的好處是,通過只存儲表示曲線的點數據,您可以在任何比例下呈現相同的曲線,而無需將曲線存儲在紋理中。因此,您不需要存儲數百個中間點來形成小線段來表示相同的曲線。

Here are a number of sample code snippets使用Android中的Path對象構造自由形式矢量曲線。

如果您有大量曲線要呈現到畫布,則只需存儲定義貝塞爾曲線的點數據。一次只創建Path對象並使用reset方法重新定義每次要繪製新曲線的點時非常重要。 Sample code to achieve this can be found here.

+0

我知道Bezier曲線如何工作,但Androids Path曲線的效率如何?我可以繪製數千行而不觸及任何內存限制嗎?示例應用程序而不是片段? – user1767754

+0

Path是Android中的一個可變對象。因此,只使用一個路徑對象,您可以加載貝塞爾曲線的定義點數據,渲染到畫布,重置路徑對象並將新點數據加載到相同的路徑對象。因此,如果有足夠的內存來存儲點數據以定義所有貝塞爾曲線,則您的應用程序可以渲染數千條曲線。下面是一些如何使用reset重新定義Path對象中的點數據的示例,以便它可以重複使用:https://www.codota.com/android/methods/android.graphics.Path/reset – sparkplug

+0

所有示例在他們所屬的github項目的codota頁面鏈接上,所以你可以下載一個使用代碼片段的完整項目。 – sparkplug