如何从c#中的bing地图创建缩略图/快照以实现通用解决方案

如何从c#中的bing地图创建缩略图/快照以实现通用解决方案,c#,windows-phone-8.1,win-universal-app,bing-maps,uwp-maps,C#,Windows Phone 8.1,Win Universal App,Bing Maps,Uwp Maps,我有一个支持Windows Phone平台的通用解决方案。用户点击Bing地图后,会创建一个pin,也会创建地图的快照,但此图像不包含pin 我正在将Windows.UI.Xaml.Controls.Maps.MapControl与此Xaml一起使用:- XAML: <mp:MapControl x:Name="mpWinPh" Grid.Row="1" Width="{Bindin

我有一个支持Windows Phone平台的通用解决方案。用户点击Bing地图后,会创建一个pin,也会创建地图的快照,但此图像不包含pin

我正在将Windows.UI.Xaml.Controls.Maps.MapControl与此Xaml一起使用:-

XAML:

<mp:MapControl x:Name="mpWinPh"
                           Grid.Row="1"
                           Width="{Binding ElementName=ControlRoot,
                                           Path=Width}"
                           Height="{StaticResource ActivityLogGfxSize}"
                           MapServiceToken="{Binding Credentials}"
                           MapTapped="mpWinPh_MapTapped" />
private async void mpWinPh_MapTapped(MapControl sender, MapInputEventArgs args)
{
    var location = args.Location;
    BasicGeoposition snPosition = new BasicGeoposition
    {
        Latitude = location.Position.Latitude,
        Longitude = location.Position.Longitude,
        Altitude = location.Position.Altitude
    };
    Geopoint snPoint = new Geopoint(snPosition);
    MapIcon icon = new MapIcon { Location = snPoint };
    mpWinPh.Center = snPoint;
    mpWinPh.ZoomLevel = 15;
    mpWinPh.MapElements.Clear();
    mpWinPh.MapElements.Add(icon);

    Field.GpsCoordinate coordinate = new Field.GpsCoordinate { Latitude = location.Position.Latitude, Longitude = location.Position.Longitude };
    (viewModel as LocationControlViewModel).UpdateGps(coordinate);

    await SaveImage();
}

private async Task SaveImage()
{
    var renderTargetBitmap = new RenderTargetBitmap();
    await renderTargetBitmap.RenderAsync(mpWinPh);
    var pixelBuffer = await renderTargetBitmap.GetPixelsAsync();

    var pixels = pixelBuffer.ToArray();

    // Useful for rendering in the correct DPI
    var displayInformation = DisplayInformation.GetForCurrentView();

    var stream = new InMemoryRandomAccessStream();
    var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream);
    encoder.SetPixelData(BitmapPixelFormat.Bgra8,
                         BitmapAlphaMode.Premultiplied,
                         (uint)renderTargetBitmap.PixelWidth,
                         (uint)renderTargetBitmap.PixelHeight,
                         displayInformation.RawDpiX,
                         displayInformation.RawDpiY,
                         pixels);

    await encoder.FlushAsync();
    stream.Seek(0);
    byte[] resizedData = new byte[stream.Size];
    await stream.ReadAsync(resizedData.AsBuffer(), (uint)stream.Size, InputStreamOptions.None);
    await SaveStreamToTempLocation(() => Task.FromResult(new MemoryStream(resizedData) as Stream));
}

由于向地图添加数据是一项异步操作,因此在向地图添加任何数据(如MapIcon)或使用任何视图设置API更改地图视图后,应等待地图控件的LoadingStatus变为MapLoadingStatus.Loaded。
这表示映射控件已完成异步工作并已完全渲染。您可以在地图控件上注册LoadingStatusChanged事件。

问题仍然不清楚。您可以在保存之前通过向地图控件添加pin来使用pin保存图像。当它在页面中时,一切正常。但是当这个地图控件被移动到弹出窗口时。我在等待renderTargetBitmap.RenderAsync(mpWinPh)的线路上遇到一个异常,它说“值不在预期范围内”。非常感谢您的帮助!