I figured it out.
Here are the steps
- Iterate over the
StrokeCollection
- Get
PathGeometry
of each Stroke
by calling GetGeometry
function and then calling GetOutlinedPathGeometry
.
- Get
Figures
out of Geometry
. I am doing it by saving the PathGeometry
to XAML and then parsing the Figures
attribute by XElement.Parse
.
- Then I can just create a svg document and add each path (see code below).
I am using SVG Rendering Library to create SVG document.
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
});
}
}
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…