XAML-Map-Control/MapControl/BitmapSourceHelper.cs

59 lines
1.6 KiB
C#
Raw Normal View History

// XAML Map Control - https://github.com/ClemensFischer/XAML-Map-Control
// © 2017 Clemens Fischer
2016-02-23 20:07:30 +01:00
// Licensed under the Microsoft Public License (Ms-PL)
using System;
using System.IO;
using System.Net;
using System.Windows.Media.Imaging;
namespace MapControl
{
/// <summary>
2017-07-17 21:31:09 +02:00
/// Creates frozen BitmapSources from Stream, file or Uri.
/// </summary>
public static class BitmapSourceHelper
2016-02-23 20:07:30 +01:00
{
public static BitmapSource FromStream(Stream stream)
{
2017-07-17 21:31:09 +02:00
return BitmapFrame.Create(stream, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
}
2016-02-23 20:07:30 +01:00
2017-07-17 21:31:09 +02:00
public static BitmapSource FromFile(string path)
{
if (!File.Exists(path))
{
return null;
}
2016-02-23 20:07:30 +01:00
2017-07-17 21:31:09 +02:00
using (var fileStream = new FileStream(path, FileMode.Open, FileAccess.Read))
{
return FromStream(fileStream);
}
2016-02-23 20:07:30 +01:00
}
public static BitmapSource FromUri(Uri uri)
{
2017-07-17 21:31:09 +02:00
if (!uri.IsAbsoluteUri)
2016-02-23 20:07:30 +01:00
{
2017-07-17 21:31:09 +02:00
return FromFile(uri.OriginalString);
2016-02-23 20:07:30 +01:00
}
2017-07-17 21:31:09 +02:00
if (uri.Scheme == "file")
2016-02-23 20:07:30 +01:00
{
2017-07-17 21:31:09 +02:00
return FromFile(uri.LocalPath);
2016-02-23 20:07:30 +01:00
}
2017-07-17 21:31:09 +02:00
using (var response = WebRequest.Create(uri).GetResponse())
using (var responseStream = response.GetResponseStream())
using (var memoryStream = new MemoryStream())
{
responseStream.CopyTo(memoryStream);
memoryStream.Seek(0, SeekOrigin.Begin);
return FromStream(memoryStream);
}
2016-02-23 20:07:30 +01:00
}
}
}