Wpf InkCanvas сохранить сток как SVG
Можно ли сохранить коллекцию штрихов InkCanvas в изображение SVG? Единственное, что я могу найти, это то, что я могу сохранить обводки как GIF со встроенным ISF (Ink Serialized Format) или, возможно, отобразить их как растровые изображения. Я хочу сохранить штрихи в векторном формате, который может быть совместим с другими платформами (например, веб).
1 ответ
Решение
Я понял.
Вот шаги
- Перебрать
StrokeCollection
- Получить
PathGeometry
каждогоStroke
позвонивGetGeometry
функция, а затем вызовGetOutlinedPathGeometry
, - Получить
Figures
снаружиGeometry
, Я делаю это, сохраняяPathGeometry
в XAML, а затем анализFigures
приписыватьXElement.Parse
, - Затем я могу просто создать документ SVG и добавить каждый путь (см. Код ниже).
Я использую SVG Rendering Library для создания SVG-документа.
var svg = new SvgDocument();
var colorServer = new SvgColourServer(System.Drawing.Color.Black);
var group = new SvgGroup {Fill = colorServer, Stroke = colorServer};
svg.Children.Add(group);
foreach (var stroke in InkCanvas.Strokes)
{
var geometry = stroke.GetGeometry(stroke.DrawingAttributes).GetOutlinedPathGeometry();
var s = XamlWriter.Save(geometry);
if (s.IsNotNullOrEmpty())
{
var element = XElement.Parse(s);
var data = element.Attribute("Figures")?.Value;
if (data.IsNotNullOrEmpty())
{
group.Children.Add(new SvgPath
{
PathData = SvgPathBuilder.Parse(data),
Fill = colorServer,
Stroke = colorServer
});
}
}
}