예제 #1
0
        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);
                }
            }
        }
예제 #2
0
        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());
            }
        }