private void ShootSnapshot(BoundingBox boundingBox, Route route, int width,
                                   int height, int scale, string fileName)
        {
            var imageFilePath = Path.Combine(
                Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
                "Familie Wandel Pad",
                "MapImages",
                $"{fileName}.png"
                );

            using var fileStream = new FileStream(imageFilePath, FileMode.Create, FileAccess.Write);
            using var skSurface  = SKSurface.Create(
                      new SKImageInfo(width, height, SKImageInfo.PlatformColorType, SKAlphaType.Unpremul)
                      );
            skSurface.Canvas.Clear(Color.Transparent.ToSkia());
            skSurface.Canvas.Scale(scale, scale);

            var viewport = new Viewport
            {
                Center     = boundingBox.Centroid,
                Width      = width,
                Height     = height,
                Resolution = ZoomHelper.DetermineResolution(boundingBox.Width, boundingBox.Height, width, height)
            };

            DrawMap(skSurface, boundingBox, viewport);
            DrawRoute(skSurface, viewport, boundingBox, route);
            DrawArrows(skSurface, viewport, route, scale);
            DrawPOIs(skSurface, viewport, route, scale);

            using var image = skSurface.Snapshot();
            using var data  = image.Encode();
            data.SaveTo(fileStream);
        }
Beispiel #2
0
 /// <summary>
 /// Navigate center of viewport to center of extent and change resolution
 /// </summary>
 /// <param name="extent">New extent for viewport to show</param>
 /// <param name="scaleMethod">Scale method to use to determin resolution</param>
 public void NavigateTo(BoundingBox extent, ScaleMethod scaleMethod = ScaleMethod.Fit)
 {
     Viewport.Resolution = ZoomHelper.DetermineResolution(
         extent.Width, extent.Height, Viewport.Width, Viewport.Height, scaleMethod);
     Viewport.Center = extent.Centroid;
     OnRefreshGraphics();
     RefreshData(true);
 }
Beispiel #3
0
 /// <summary>
 /// Navigate center of viewport to center of extent and change resolution
 /// </summary>
 /// <param name="extent">New extent for viewport to show</param>
 /// <param name="scaleMethod">Scale method to use to determin resolution</param>
 public void NavigateTo(BoundingBox extent, ScaleMethod scaleMethod = ScaleMethod.Fit)
 {
     if (extent == null)
     {
         return;
     }
     _viewport.SetResolution(ZoomHelper.DetermineResolution(
                                 extent.Width, extent.Height, _viewport.Width, _viewport.Height, scaleMethod));
     _viewport.SetCenter(extent.Centroid);
     _map.RefreshData(_viewport.Extent, _viewport.Resolution, true);
 }
Beispiel #4
0
        /// <summary>
        /// Navigate center of viewport to center of extent and change resolution
        /// </summary>
        /// <param name="extent">New extent for viewport to show</param>
        /// <param name="scaleMethod">Scale method to use to determine resolution</param>
        /// <param name="duration">Duration of animation in millisecondsScale method to use to determine resolution</param>
        public void NavigateTo(BoundingBox extent, ScaleMethod scaleMethod = ScaleMethod.Fit, long duration = 300)
        {
            if (extent == null)
            {
                return;
            }

            var resolution = ZoomHelper.DetermineResolution(
                extent.Width, extent.Height, _viewport.Width, _viewport.Height, scaleMethod);

            NavigateTo(extent.Centroid, resolution, duration);
        }
Beispiel #5
0
        /// <summary>
        /// Navigate center of viewport to center of extent and change resolution
        /// </summary>
        /// <param name="extent">New extent for viewport to show</param>
        /// <param name="scaleMethod">Scale method to use to determine resolution</param>
        /// <param name="duration">Duration for animation in milliseconds.</param>
        /// <param name="easing">The type of easing function used to transform from begin tot end state</param>
        public void NavigateTo(MRect?extent, ScaleMethod scaleMethod = ScaleMethod.Fit, long duration = -1, Easing?easing = default)
        {
            if (extent == null)
            {
                return;
            }

            var resolution = ZoomHelper.DetermineResolution(
                extent.Width, extent.Height, _viewport.Width, _viewport.Height, scaleMethod);

            NavigateTo(extent.Centroid, resolution, duration, easing);
        }
        /// <summary>
        /// Navigate center of viewport to center of extent and change resolution
        /// </summary>
        /// <param name="extent">New extent for viewport to show</param>
        /// <param name="scaleMethod">Scale method to use to determine resolution</param>
        public void NavigateTo(BoundingBox extent, ScaleMethod scaleMethod = ScaleMethod.Fit)
        {
            if (extent == null)
            {
                return;
            }

            var resolution = ZoomHelper.DetermineResolution(
                extent.Width, extent.Height, _viewport.Width, _viewport.Height, scaleMethod);

            _viewport.SetResolution(resolution);

            _viewport.SetCenter(extent.Centroid);

            Navigated?.Invoke(this, EventArgs.Empty);
        }