ImagePathToBitmapConverter.cs 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. using System.Globalization;
  2. using System.IO;
  3. using System.Reflection;
  4. using Avalonia;
  5. using Avalonia.Data;
  6. using Avalonia.Media.Imaging;
  7. using Avalonia.Platform;
  8. using PixiEditor.UI.Common.Converters;
  9. namespace PixiEditor.AvaloniaUI.Helpers.Converters;
  10. internal class ImagePathToBitmapConverter : SingleInstanceConverter<ImagePathToBitmapConverter>
  11. {
  12. public override object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  13. {
  14. if (value is not string path)
  15. return AvaloniaProperty.UnsetValue;
  16. try
  17. {
  18. return LoadBitmapFromRelativePath(path);
  19. }
  20. catch (FileNotFoundException)
  21. {
  22. return AvaloniaProperty.UnsetValue;
  23. }
  24. }
  25. public static Bitmap LoadBitmapFromRelativePath(string path)
  26. {
  27. Uri uri = new($"avares://{Assembly.GetExecutingAssembly().FullName}{path}");
  28. if (!AssetLoader.Exists(uri))
  29. throw new FileNotFoundException($"Could not find asset with path {path}");
  30. return new Bitmap(AssetLoader.Open(uri));
  31. }
  32. }