Browse Source

Support loading bitmaps from resources.

Closes #358.
Steven Kirk 10 years ago
parent
commit
b4417e3bd6
1 changed files with 14 additions and 1 deletions
  1. 14 1
      src/Markup/Perspex.Markup.Xaml/Converters/BitmapTypeConverter.cs

+ 14 - 1
src/Markup/Perspex.Markup.Xaml/Converters/BitmapTypeConverter.cs

@@ -5,6 +5,7 @@ using System;
 using System.Globalization;
 using OmniXaml.TypeConversion;
 using Perspex.Media.Imaging;
+using Perspex.Platform;
 
 namespace Perspex.Markup.Xaml.Converters
 {
@@ -22,7 +23,19 @@ namespace Perspex.Markup.Xaml.Converters
 
         public object ConvertFrom(IXamlTypeConverterContext context, CultureInfo culture, object value)
         {
-            return new Bitmap((string)value);
+            var uri = new Uri((string)value, UriKind.RelativeOrAbsolute);
+            var scheme = uri.IsAbsoluteUri ? uri.Scheme : "file";
+
+            switch (scheme)
+            {
+                case "file":
+                    return new Bitmap((string)value);
+                case "resource":
+                    var assets = PerspexLocator.Current.GetService<IAssetLoader>();
+                    return new Bitmap(assets.Open(uri));
+                default:
+                    throw new NotSupportedException($"Unsupported bitmap URI scheme: {uri.Scheme}.");
+            }
         }
 
         public object ConvertTo(IXamlTypeConverterContext context, CultureInfo culture, object value, Type destinationType)