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;
}
}
}