Bing Maps CustomMapTileDataSource不会加载pixelData

时间:2016-11-23 12:35:59

标签: c# uwp bing-maps uwp-maps

我正在使用MapControl编写一个UWP应用程序我已经实现了我自己的MapTileSource,如下所示:

var nativeTileLayer = new MapTileSource();

nativeTileLayer.DataSource = new UWPSyncTileLayer();
nativeTileLayer.TilePixelSize = outerItem.TileSize;
nativeTileLayer.AllowOverstretch = true;
// NativeMap.Style = MapStyle.None;

outerItem.NativeObject = nativeTileLayer;
NativeMap.TileSources.Clear();
NativeMap.TileSources.Add(nativeTileLayer);
return nativeTileLayer;

UWPSyncTileLayer是我自己CustomMapTileDataSource

的实现
internal class UWPSyncTileLayer : CustomMapTileDataSource
{
    public UWPSyncTileLayer(int tileSize = 256)
    {
        this.BitmapRequested += UWPSyncTileLayer_BitmapRequested;
    }

    private void UWPSyncTileLayer_BitmapRequested(CustomMapTileDataSource sender, MapTileBitmapRequestedEventArgs args)
    {
        var deferral = args.Request.GetDeferral();
        var data = Convert.FromBase64String("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".Split(",".ToCharArray(), 2)[1]);
        MemoryStream stream = new MemoryStream();
        stream.Write(data, 0, data.Length);
        stream.Position = 0;
        var decoder = Windows.Graphics.Imaging.BitmapDecoder.CreateAsync(stream.AsRandomAccessStream()).AsTask().Result;
        var pixelProvider = decoder.GetPixelDataAsync().AsTask().Result;// Windows.Graphics.Imaging.BitmapPixelFormat.Rgba8, Windows.Graphics.Imaging.BitmapAlphaMode.Ignore, new Windows.Graphics.Imaging.BitmapTransform(), Windows.Graphics.Imaging.ExifOrientationMode.RespectExifOrientation, Windows.Graphics.Imaging.ColorManagementMode.ColorManageToSRgb).AsTask().Result;
        var pixelData = pixelProvider.DetachPixelData();
        InMemoryRandomAccessStream randomAccessStream = new InMemoryRandomAccessStream();
        IOutputStream outputStream = randomAccessStream.GetOutputStreamAt(0);
        DataWriter writer = new DataWriter(outputStream);
        writer.WriteBytes(pixelData);
        var i = writer.StoreAsync().AsTask().Result;
        var d = writer.FlushAsync().AsTask().Result;
        args.Request.PixelData = RandomAccessStreamReference.CreateFromStream(randomAccessStream);
        deferral.Complete();
    }
}

但图像始终为空白。

有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:0)

我无法从您的数据流中判断出来,但看起来您可能正在将压缩的PNG流传递给PixelData属性。您需要将PNG解码为RGB值,并将PixelData设置为已解码的RGBA缓冲区。请参阅此处的示例代码:https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.maps.maptilebitmaprequest.pixeldata.aspx