Wpf InkCanvas 将笔画保存为 svg

Wpf InkCanvas save stokes as svg

是否可以将 InkCanvas 笔画集保存为 svg 图片?我唯一能找到的是我可以将笔画保存为带有嵌入式 ISF(墨水序列化格式)的 GIF,或者将它们渲染为位图。我想以可以与其他平台(如网络)互操作的矢量格式保存笔画。

我明白了。

步骤如下

  1. 遍历 StrokeCollection
  2. 通过调用 GetGeometry 函数然后调用 GetOutlinedPathGeometry.
  3. 获得每个 StrokePathGeometry
  4. Geometry 中得到 Figures。我通过将 PathGeometry 保存到 XAML 然后通过 XElement.Parse.
  5. 解析 Figures 属性来做到这一点
  6. 然后我可以创建一个 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
               });
           }
       }
}