From f2204fa6c06518a2d0eb961b39bc7cf546c26e2b Mon Sep 17 00:00:00 2001 From: Clemens Date: Wed, 10 Nov 2021 22:31:06 +0100 Subject: [PATCH] Check format in MBTileSource --- MBTiles/Shared/MBTileLayer.cs | 2 +- MBTiles/Shared/MBTileSource.cs | 29 +++++++++++++++++++++++++---- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/MBTiles/Shared/MBTileLayer.cs b/MBTiles/Shared/MBTileLayer.cs index 8739f2ea..19caffa0 100644 --- a/MBTiles/Shared/MBTileLayer.cs +++ b/MBTiles/Shared/MBTileLayer.cs @@ -39,7 +39,7 @@ namespace MapControl.MBTiles } /// - /// May be overridden to create a derived MBTileSource that handles other tile formats than png and jpg, e.g. pbf. + /// May be overridden to create a derived MBTileSource that handles other tile formats than png and jpg. /// protected virtual MBTileSource CreateTileSource(MBTileData tileData) { diff --git a/MBTiles/Shared/MBTileSource.cs b/MBTiles/Shared/MBTileSource.cs index 0fb959f5..0c5bb314 100644 --- a/MBTiles/Shared/MBTileSource.cs +++ b/MBTiles/Shared/MBTileSource.cs @@ -3,6 +3,7 @@ // Licensed under the Microsoft Public License (Ms-PL) using System; +using System.Diagnostics; using System.Threading.Tasks; #if WINUI using Microsoft.UI.Xaml.Media; @@ -20,17 +21,27 @@ namespace MapControl.MBTiles public MBTileSource(MBTileData tiledata) { - TileData = tiledata; + var format = tiledata.Metadata["format"]; + + if (format == "png" || format == "jpg") + { + TileData = tiledata; + } + else + { + Debug.WriteLine($"MBTileSource: unsupported format '{format}'"); + } } public void Dispose() { Dispose(true); + GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { - if (disposing) + if (disposing && TileData != null) { TileData.Dispose(); } @@ -38,9 +49,19 @@ namespace MapControl.MBTiles public override async Task LoadImageAsync(int x, int y, int zoomLevel) { - var buffer = await TileData.ReadImageBufferAsync(x, y, zoomLevel); + ImageSource image = null; - return buffer != null ? await ImageLoader.LoadImageAsync(buffer) : null; + if (TileData != null) + { + var buffer = await TileData.ReadImageBufferAsync(x, y, zoomLevel); + + if (buffer != null) + { + image = await ImageLoader.LoadImageAsync(buffer); + } + } + + return image; } } }