2017-01-23 3 views
1

Я делаю приложение с использованием форм Xamarin.Рисовать сплайн (плавный путь) с помощью SkiaSharp lib на Xamarin.Forms?

Я хочу нарисовать гладкий путь (сплайн) с помощью SKPath, но я не могу найти простой способ достичь этого.

Skiasharp не поддерживает его в настоящее время, если я не сделаю путь плавно сам.

Спасибо.

ответ

3

SkiaSharp поддерживает кубические кривой Безье. Итак, что вы можете сделать, это разделить сплайн на сегменты (точки определяют конечные точки сегмента) и нарисовать каждый сегмент, используя кубическую кривую Безье. Для этого вам нужно ввести две контрольные точки между каждой точкой кривой сплайна. Эти точки необходимо выбирать так, чтобы кривые в соседних сегментах плавно шлифовались.

Я только что выполнил это. Метод public static SKPath CreateSpline(params SKPoint[] Points) создает путь, который вы можете использовать для рисования сплайна между точками. Вы можете просмотреть реализацию здесь:

https://github.com/PeterWaher/IoTGateway/blob/master/Script/Waher.Script.Graphs/Functions/Plots/Plot2DCurve.cs

Пример:

Spline example

+0

Эй, Питер, Удивительная работа. Спасибо за ваш обмен. Я ценю это. –

2

Я не уверен, что именно то, что вы просите, но есть две области для разглаживания:

Сглаживание с помощью SKPaint.IsAntialias:

var paint = new SKPaint { 
    IsAntialias = true 
}; 
canvas.DrawPath (path, paint); 

Путь Кривые:

Если вам нужен кривых на пути, таких как круглые углы, вам нужно будет использовать различные методы кривой. Они включают, но не ограничиваются ими, SKPath.ArcTo() и 'SKPath.CubicTo():

var path = new SKPath(); 
path.MoveTo(10, 10); 
path.ArcTo(SKRect.Create(10, 10, 30, 30), 0, 45); 

Path Документов https://developer.xamarin.com/api/type/SkiaSharp.SKPath/

+0

Привет, Мэтью, спасибо за ответ. Я нахожу способ, который делает мой путь ровным. Полагаю, вы поймете, о чем я прошу. Ответ, который вы дали, не то, что я ищу. –

+0

У моего пути не много точек, поэтому это не гладкая линия. Но я не могу использовать ArcTo или CubicTo для создания bezier, потому что Path не является статичным. –

+0

Я думаю, что существует много графической библиотеки, которая предоставляет эту функцию на других платформах. и я ищу то же самое в формах Skiasharp. –

Смежные вопросы