mirror of
https://github.com/ClemensFischer/XAML-Map-Control.git
synced 2026-04-07 07:25:21 +00:00
Updated MapsforgeTileSource
This commit is contained in:
parent
a1df4d39bb
commit
266f44a0fd
5 changed files with 83 additions and 57 deletions
|
|
@ -1,9 +1,14 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Runtime.InteropServices.WindowsRuntime;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.Extensions.Logging;
|
||||
#if UWP
|
||||
using Windows.UI.Xaml.Media;
|
||||
using Windows.UI.Xaml.Media.Imaging;
|
||||
#elif WINUI
|
||||
using Microsoft.UI.Xaml.Media;
|
||||
using Microsoft.UI.Xaml.Media.Imaging;
|
||||
#endif
|
||||
|
||||
|
|
@ -11,20 +16,34 @@ namespace MapControl.MapsforgeTiles
|
|||
{
|
||||
public partial class MapsforgeTileSource
|
||||
{
|
||||
private static WriteableBitmap CreateImage(int[] pixels)
|
||||
public override async Task<ImageSource> LoadImageAsync(int zoomLevel, int column, int row)
|
||||
{
|
||||
var size = (int)Math.Sqrt(pixels.Length);
|
||||
ImageSource image = null;
|
||||
var size = TileRenderer.TileSize;
|
||||
var bitmap = new WriteableBitmap(size, size);
|
||||
|
||||
using var stream = bitmap.PixelBuffer.AsStream();
|
||||
using var writer = new BinaryWriter(stream);
|
||||
|
||||
foreach (var pixel in pixels)
|
||||
try
|
||||
{
|
||||
writer.Write(pixel);
|
||||
// Run a Task because in WinUI/UWP LoadImageAsync is called in the UI thread.
|
||||
//
|
||||
await Task.Run(() =>
|
||||
{
|
||||
var pixels = tileRenderer.RenderTile(zoomLevel, column, row);
|
||||
|
||||
if (pixels != null)
|
||||
{
|
||||
stream.Write(MemoryMarshal.AsBytes(pixels.AsSpan()));
|
||||
image = bitmap;
|
||||
}
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger?.LogError(ex, "LoadImageAsync");
|
||||
}
|
||||
|
||||
return bitmap;
|
||||
return image;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue