How to load an svg file in Win2D canvasvirtualcontrol using c# ?

Deepak G 21 Reputation points
2020-08-17T06:24:16.207+00:00

I'm developing an UWP application with Win2D support and I want to load svg file in my CanvasVirtualControl, but I don't know how to convert an svg into RandomAccessStream and how to load svg in CanvasVirtualControl. Really need help. Thanks in advance :)

Universal Windows Platform (UWP)
0 comments No comments
{count} votes

Accepted answer
  1. Nico Zhu (Shanghai Wicresoft Co,.Ltd.) 12,861 Reputation points
    2020-08-17T12:21:08.81+00:00

    Hi, DeepakG
    Welcome to Microsoft Q&A,

    How to load an svg image in win2d (CanvasVirtualControl) using c#?

    Win2D contains CanvasSvgDocument class that use to load svg from stream. You could StorageFile OpenReadAsync method to open svg file as stream then call CanvasSvgDocument.LoadAsync method to get svgDocument. For more please refer the the following.

    CanvasVirtualControl canvasVirtualControl;
    private void Page_Loaded(object sender, RoutedEventArgs e)
    {
        canvasVirtualControl = new CanvasVirtualControl();
        canvasVirtualControl.Width = 1486;
        canvasVirtualControl.Height = 610;
        MyCanvas.Children.Add(canvasVirtualControl);
        Canvas.SetLeft(canvasVirtualControl, 0);
        Canvas.SetTop(canvasVirtualControl, 0);
        canvasVirtualControl.RegionsInvalidated += CanvasVirtualControl_RegionsInvalidated;
    }
    
    private async void CanvasVirtualControl_RegionsInvalidated(CanvasVirtualControl sender, CanvasRegionsInvalidatedEventArgs args)
    {
        CanvasDrawingSession drawingSession;
        Rect rect = new Rect(args.InvalidatedRegions[0].Left, args.InvalidatedRegions[0].Top, args.InvalidatedRegions[0].Width, args.InvalidatedRegions[0].Height);
        using (drawingSession = sender.CreateDrawingSession(rect))
        {
            var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/xxx.svg"));
    
            using (var stream = await file.OpenReadAsync())
            {
               var svgDocument = await CanvasSvgDocument.LoadAsync(sender, stream);
    
                drawingSession.DrawSvg(svgDocument, sender.Size);
            }
        }        
    }
    

    Thanks
    Nico Zhu


0 additional answers

Sort by: Most helpful