private async Task RenderSvg(IRandomAccessStream writeStream) { var sharedDevice = CanvasDevice.GetSharedDevice(); using (var offscreen = new CanvasRenderTarget(sharedDevice, (float)InkControl.RenderSize.Width, (float)InkControl.RenderSize.Height, 96)) { using (var session = offscreen.CreateDrawingSession()) { var svgDocument = new CanvasSvgDocument(sharedDevice); svgDocument.Root.SetStringAttribute("viewBox", $"0 0 {InkControl.RenderSize.Width} {InkControl.RenderSize.Height}"); foreach (var stroke in InkControl.InkPresenter.StrokeContainer.GetStrokes()) { var canvasGeometry = CanvasGeometry.CreateInk(session, new[] { stroke }).Outline(); //.Simplify(CanvasGeometrySimplification.Lines); var pathReceiver = new CanvasGeometryToSvgPathReader(); canvasGeometry.SendPathTo(pathReceiver); var element = svgDocument.Root.CreateAndAppendNamedChildElement("path"); element.SetStringAttribute("d", pathReceiver.Path); var color = stroke.DrawingAttributes.Color; element.SetColorAttribute("fill", color); //if (stroke.DrawingAttributes.DrawAsHighlighter) // element.SetFloatAttribute("fill-opacity", .9f); } await svgDocument.SaveAsync(writeStream); } } }
private async void Save_Clicked(object sender, RoutedEventArgs e) { if (svgDocument == null) { return; } using (var stream = await ApplicationData.Current.LocalFolder.OpenStreamForWriteAsync( "SvgExample.svg", CreationCollisionOption.ReplaceExisting)) { await svgDocument.SaveAsync(stream.AsRandomAccessStream()); } }