c# - Wpf InkCanvas 将笔画保存为 svg

标签 c# wpf svg inkcanvas

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

最佳答案

我想通了。

步骤如下

  1. 遍历 StrokeCollection
  2. 通过调用 GetGeometry 函数然后调用 GetOutlinedPathGeometry 获取每个 StrokePathGeometry
  3. 几何中获取图形。我是通过将 PathGeometry 保存到 XAML,然后通过 XElement.Parse 解析 Figures 属性来实现的。
  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
               });
           }
       }
}

关于c# - Wpf InkCanvas 将笔画保存为 svg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39261548/

相关文章:

c# - 如何为多个 BO 属性定义 IDataErrorInfo 错误属性

javascript - svg-pan-zoom 平移/缩放到任何对象

c# - 鼠标在面板上单击会跳过单击

c# - 如何将焦点设置到 WPF 工具包数据网格的特定单元格

c# - 执行任何原始 SQL 查询

c# - 是否可以在 WPF ListView 中实现平滑滚动?

javascript - SVG:悬停时显示/隐藏文本或文本区域

javascript - 如何设置 SVG 路径的样式来拍摄图像?

c# - 如何在 C# 中设置图像大小限制(例如;<150kb)

c# - 无效的 Razor @model 生成的代码