Version 4.12.2 Improved GroundOverlayPanel

This commit is contained in:
ClemensF 2019-06-17 18:09:28 +02:00
parent c28387f87c
commit c8f834f940
5 changed files with 29 additions and 14 deletions

View file

@ -21,7 +21,9 @@ namespace MapControl
public static async Task<ImageSource> LoadImageAsync(IRandomAccessStream stream) public static async Task<ImageSource> LoadImageAsync(IRandomAccessStream stream)
{ {
var image = new BitmapImage(); var image = new BitmapImage();
await image.SetSourceAsync(stream); await image.SetSourceAsync(stream);
return image; return image;
} }

View file

@ -20,11 +20,13 @@ namespace MapControl
public static ImageSource LoadImage(Stream stream) public static ImageSource LoadImage(Stream stream)
{ {
var bitmapImage = new BitmapImage(); var bitmapImage = new BitmapImage();
bitmapImage.BeginInit(); bitmapImage.BeginInit();
bitmapImage.CacheOption = BitmapCacheOption.OnLoad; bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
bitmapImage.StreamSource = stream; bitmapImage.StreamSource = stream;
bitmapImage.EndInit(); bitmapImage.EndInit();
bitmapImage.Freeze(); bitmapImage.Freeze();
return bitmapImage; return bitmapImage;
} }

View file

@ -71,11 +71,11 @@ namespace MapControl.Images
var ext = Path.GetExtension(path).ToLower(); var ext = Path.GetExtension(path).ToLower();
if (ext == ".kmz") if (ext == ".kmz")
{ {
imageOverlays = await ReadGroundOverlaysFromArchive(path); imageOverlays = await ReadGroundOverlaysFromArchiveAsync(path);
} }
else if (ext == ".kml") else if (ext == ".kml")
{ {
imageOverlays = await ReadGroundOverlaysFromFile(path); imageOverlays = await ReadGroundOverlaysFromFileAsync(path);
} }
} }
catch (Exception ex) catch (Exception ex)

View file

@ -20,7 +20,7 @@ namespace MapControl.Images
UseLayoutRounding = false; UseLayoutRounding = false;
} }
private async Task<IEnumerable<ImageOverlay>> ReadGroundOverlaysFromFile(string docFile) private async Task<IEnumerable<ImageOverlay>> ReadGroundOverlaysFromFileAsync(string docFile)
{ {
docFile = Path.GetFullPath(docFile); docFile = Path.GetFullPath(docFile);
@ -32,7 +32,7 @@ namespace MapControl.Images
kmlDocument.Load(stream.AsStreamForRead()); kmlDocument.Load(stream.AsStreamForRead());
} }
var imageOverlays = ReadGroundOverlays(kmlDocument).ToList(); var imageOverlays = await Task.Run(() => ReadGroundOverlays(kmlDocument).ToList());
var docUri = new Uri(docFile); var docUri = new Uri(docFile);
foreach (var imageOverlay in imageOverlays) foreach (var imageOverlay in imageOverlays)
@ -43,7 +43,7 @@ namespace MapControl.Images
return imageOverlays; return imageOverlays;
} }
private async Task<IEnumerable<ImageOverlay>> ReadGroundOverlaysFromArchive(string archiveFile) private async Task<IEnumerable<ImageOverlay>> ReadGroundOverlaysFromArchiveAsync(string archiveFile)
{ {
using (var archive = ZipFile.OpenRead(archiveFile)) using (var archive = ZipFile.OpenRead(archiveFile))
{ {
@ -62,7 +62,7 @@ namespace MapControl.Images
kmlDocument.Load(docStream); kmlDocument.Load(docStream);
} }
var imageOverlays = ReadGroundOverlays(kmlDocument).ToList(); var imageOverlays = await Task.Run(() => ReadGroundOverlays(kmlDocument).ToList());
foreach (var imageOverlay in imageOverlays) foreach (var imageOverlay in imageOverlays)
{ {
@ -74,7 +74,7 @@ namespace MapControl.Images
using (var memoryStream = new MemoryStream()) using (var memoryStream = new MemoryStream())
{ {
await zipStream.CopyToAsync(memoryStream); await zipStream.CopyToAsync(memoryStream);
memoryStream.Position = 0; memoryStream.Seek(0, SeekOrigin.Begin);
imageOverlay.ImageSource = await ImageLoader.LoadImageAsync(memoryStream.AsRandomAccessStream()); imageOverlay.ImageSource = await ImageLoader.LoadImageAsync(memoryStream.AsRandomAccessStream());
} }
} }

View file

@ -14,7 +14,17 @@ namespace MapControl.Images
{ {
public partial class GroundOverlayPanel public partial class GroundOverlayPanel
{ {
private async Task<IEnumerable<ImageOverlay>> ReadGroundOverlaysFromFile(string docFile) private Task<List<ImageOverlay>> ReadGroundOverlaysFromFileAsync(string docFile)
{
return Task.Run(() => ReadGroundOverlaysFromFile(docFile));
}
private Task<List<ImageOverlay>> ReadGroundOverlaysFromArchiveAsync(string archiveFile)
{
return Task.Run(() => ReadGroundOverlaysFromArchive(archiveFile));
}
private List<ImageOverlay> ReadGroundOverlaysFromFile(string docFile)
{ {
docFile = Path.GetFullPath(docFile); docFile = Path.GetFullPath(docFile);
@ -22,17 +32,18 @@ namespace MapControl.Images
kmlDocument.Load(docFile); kmlDocument.Load(docFile);
var imageOverlays = ReadGroundOverlays(kmlDocument).ToList(); var imageOverlays = ReadGroundOverlays(kmlDocument).ToList();
var docUri = new Uri(docFile); var docDir = Path.GetDirectoryName(docFile);
foreach (var imageOverlay in imageOverlays) foreach (var imageOverlay in imageOverlays)
{ {
imageOverlay.ImageSource = await ImageLoader.LoadImageAsync(new Uri(docUri, imageOverlay.ImagePath)); imageOverlay.ImageSource = ImageLoader.LoadImage(Path.Combine(docDir, imageOverlay.ImagePath));
} }
return imageOverlays; return imageOverlays;
} }
private async Task<IEnumerable<ImageOverlay>> ReadGroundOverlaysFromArchive(string archiveFile) private List<ImageOverlay> ReadGroundOverlaysFromArchive(string archiveFile)
{ {
using (var archive = ZipFile.OpenRead(archiveFile)) using (var archive = ZipFile.OpenRead(archiveFile))
{ {
@ -62,9 +73,9 @@ namespace MapControl.Images
using (var zipStream = imageEntry.Open()) using (var zipStream = imageEntry.Open())
using (var memoryStream = new MemoryStream()) using (var memoryStream = new MemoryStream())
{ {
await zipStream.CopyToAsync(memoryStream); zipStream.CopyTo(memoryStream);
memoryStream.Position = 0; memoryStream.Seek(0, SeekOrigin.Begin);
imageOverlay.ImageSource = await ImageLoader.LoadImageAsync(memoryStream); imageOverlay.ImageSource = ImageLoader.LoadImage(memoryStream);
} }
} }
} }