Wpf InkCanvas将stokes保存为svg

本文关键字:svg 保存 stokes InkCanvas Wpf | 更新日期: 2023-09-27 18:04:56

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

Wpf InkCanvas将stokes保存为svg

我明白了。

步骤如下

  1. 遍历StrokeCollection
  2. 先调用GetGeometry函数,再调用GetOutlinedPathGeometry,得到每个StrokePathGeometry
  3. FiguresGeometry中移除。我通过保存PathGeometry到XAML,然后通过XElement.Parse解析Figures属性来做到这一点。
  4. 然后我可以创建一个svg文档并添加每个路径(见下面的代码)。

我正在使用SVG渲染库创建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
               });
           }
       }
}