Wpf InkCanvas сохранить сток как SVG

Можно ли сохранить коллекцию штрихов InkCanvas в изображение SVG? Единственное, что я могу найти, это то, что я могу сохранить обводки как GIF со встроенным ISF (Ink Serialized Format) или, возможно, отобразить их как растровые изображения. Я хочу сохранить штрихи в векторном формате, который может быть совместим с другими платформами (например, веб).

1 ответ

Решение

Я понял.

Вот шаги

  1. Перебрать StrokeCollection
  2. Получить PathGeometry каждого Stroke позвонив GetGeometry функция, а затем вызов GetOutlinedPathGeometry,
  3. Получить Figures снаружи Geometry, Я делаю это, сохраняя PathGeometry в XAML, а затем анализ Figures приписывать XElement.Parse,
  4. Затем я могу просто создать документ 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).GetOutlinedPath‌​Geometry();

      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
               });
           }
       }
}
Другие вопросы по тегам