Wpf InkCanvas 将笔画保存为 svg
Wpf InkCanvas save stokes as svg
是否可以将 InkCanvas 笔画集保存为 svg 图片?我唯一能找到的是我可以将笔画保存为带有嵌入式 ISF(墨水序列化格式)的 GIF,或者将它们渲染为位图。我想以可以与其他平台(如网络)互操作的矢量格式保存笔画。
我明白了。
步骤如下
- 遍历
StrokeCollection
- 通过调用
GetGeometry
函数然后调用 GetOutlinedPathGeometry
. 获得每个 Stroke
的 PathGeometry
- 从
Geometry
中得到 Figures
。我通过将 PathGeometry
保存到 XAML 然后通过 XElement.Parse
. 解析 Figures
属性来做到这一点
- 然后我可以创建一个 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
});
}
}
}
是否可以将 InkCanvas 笔画集保存为 svg 图片?我唯一能找到的是我可以将笔画保存为带有嵌入式 ISF(墨水序列化格式)的 GIF,或者将它们渲染为位图。我想以可以与其他平台(如网络)互操作的矢量格式保存笔画。
我明白了。
步骤如下
- 遍历
StrokeCollection
- 通过调用
GetGeometry
函数然后调用GetOutlinedPathGeometry
. 获得每个 - 从
Geometry
中得到Figures
。我通过将PathGeometry
保存到 XAML 然后通过XElement.Parse
. 解析 - 然后我可以创建一个 svg 文档并添加每个路径(见下面的代码)。
Stroke
的 PathGeometry
Figures
属性来做到这一点
我正在使用 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
});
}
}
}