private async void LoadImageFile_OnClick(object sender, RoutedEventArgs e) { var filePicker = new FileOpenPicker(); filePicker.FileTypeFilter.Add(".jpg"); filePicker.FileTypeFilter.Add(".jpeg"); filePicker.FileTypeFilter.Add(".ppm"); var result = await filePicker.PickSingleFileAsync(); if (result != null) { _map.DeleteImage(); MapScrollViewer.ChangeView(0, 0, 1); if (result.FileType.Equals(".ppm")) { var ppm = new PpmFile(); await ppm.ReadPpmFile(result); _map.CreateImage(ppm); } else { _map.CreateImage(result); } } }
private void FitContent(int width, int height) { var currentZoom = MapScrollViewer.ZoomFactor; double scaleX = MapScrollViewer.ActualWidth / width; double scaleY = MapScrollViewer.ActualHeight / height; var newZoom = (float)(currentZoom * Math.Min(scaleX, scaleY)); newZoom = Math.Max(newZoom, MapScrollViewer.MinZoomFactor); newZoom = Math.Min(newZoom, MapScrollViewer.MaxZoomFactor); var currentPan = new Vector2((float)MapScrollViewer.HorizontalOffset, (float)MapScrollViewer.VerticalOffset); var centerOffset = new Vector2((float)MapScrollViewer.ViewportWidth, (float)MapScrollViewer.ViewportHeight) / 2; var newPan = ((currentPan + centerOffset) * newZoom / currentZoom) - centerOffset; if (double.IsNaN(newPan.X) || double.IsNaN(newPan.Y) || double.IsNaN(newZoom)) { return; } MapScrollViewer.ChangeView(newPan.X, newPan.Y, newZoom); }
private void Pan(Point curContentMousePoint) { Vector2 dragOffset = new Vector2((float)curContentMousePoint.X - (float)_mouseStart.X, (float)curContentMousePoint.Y - (float)_mouseStart.Y); var dragOffsetX = MapScrollViewer.HorizontalOffset - dragOffset.X * MapController.Instance.Zoom; var dragOffsetY = MapScrollViewer.VerticalOffset - dragOffset.Y * MapController.Instance.Zoom; MapScrollViewer.ChangeView(dragOffsetX, dragOffsetY, null); }