Wpf InkCanvas将stokes保存为svg
本文关键字:svg 保存 stokes InkCanvas Wpf | 更新日期: 2023-09-27 18:04:56
是否可以将InkCanvas笔画集合保存为svg图像?我唯一能找到的是,我可以将笔画保存为GIF格式,并嵌入ISF(墨水序列化格式),或者将它们渲染为位图。我想将笔画保存为矢量格式,可以与其他平台(如web)互操作。
我明白了。
步骤如下
- 遍历
StrokeCollection
- 先调用
GetGeometry
函数,再调用GetOutlinedPathGeometry
,得到每个Stroke
的PathGeometry
。 - 将
Figures
从Geometry
中移除。我通过保存PathGeometry
到XAML,然后通过XElement.Parse
解析Figures
属性来做到这一点。 然后我可以创建一个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).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
});
}
}
}