Пример #1
0
        private void CanvasViewOnPaintSurface(object sender, SKPaintSurfaceEventArgs args)
        {
            _canvas = args.Surface.Canvas;
            _canvas.Clear();

            if (string.IsNullOrEmpty(ResourceId))
            {
                return;
            }

            if (ResourceId.Contains("resource://"))
            {
                ResourceId = ResourceId.Replace("resource://", "");
            }

            using (Stream stream = GetType().Assembly.GetManifestResourceStream(ResourceId))
            {
                SkiaSharp.Extended.Svg.SKSvg svg = new SkiaSharp.Extended.Svg.SKSvg();
                if (ResourceId.Contains("storage"))
                {
                    svg.Load(ResourceId);
                }
                else
                {
                    svg.Load(stream);
                }

                SKImageInfo info = args.Info;
                _canvas.Translate(info.Width / 2f, info.Height / 2f);

                SKRect bounds = svg.ViewBox;
                float  xRatio = info.Width / bounds.Width;
                float  yRatio = info.Height / bounds.Height;

                float ratio = Math.Min(xRatio, yRatio);

                _canvas.Scale(ratio);
                _canvas.Translate(-bounds.MidX, -bounds.MidY);

                _canvas.DrawPicture(svg.Picture);
            }
        }