是否可以将InkCanvas笔画集保存为SVG图像?我只能找到一个方法,即将笔画保存为带有嵌入式ISF(Ink Serialized Format)的GIF或者可能将其呈现为位图。我想要将笔画保存为可与其他平台(如Web)互操作的矢量格式。
我已经弄清楚了。
以下是步骤:
StrokeCollection
。GetGeometry
函数然后调用 GetOutlinedPathGeometry
,获取每个 Stroke
的 PathGeometry
。Geometry
中获取 Figures
。我通过将 PathGeometry
保存到 XAML 中,然后通过 XElement.Parse
解析 Figures
属性来完成。我正在使用 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
});
}
}
}
foreach
循环中的第一行更改为以下内容:var geometry = stroke.GetGeometry(stroke.DrawingAttributes).GetOutlinedPathGeometry();
这将确保如果使用不同的工具/属性创建笔画,它们将被保留。例如,如果有人使用方形尖头而不是圆形尖头。编辑:编辑答案以反映此更改。 - Dax Pandhi