Моя сборка включает изображение с помощью BuildAction == Resource. Я хочу получить BitmapImage из этого встроенного ресурса.
Я могу загрузить BitmapImage из файла следующим образом:
var bitmap = new BitmapImage(new Uri(path));
Но как я могу создать Uri, который будет ссылаться на изображение встроенного ресурса?
Когда я пытаюсь создать 'URI пакета (например, pack://application:,,,/MyImage.png
или pack://application:,,,/MyAssembly;component/MyImage.png
), генерируется исключение:
System.UriFormatException "Недопустимый URI: ожидался порт из-за наличия двоеточия (": "), но порт не мог быть проанализирован".
Я нашел исправление в UriFormatException в этом сообщении
Однако при применении этого исправления я все еще получаю исключения, пытающиеся загрузить BitmapImage из URI пакета.
При использовании формата pack://application:,,,/Image.png
я получаю исключение NullReferenceException, а при использовании формата pack://application:,,,/AssemblyName;component/Image.png
я получаю исключение NotSupportedException. Префикс Uri не распознается.
Резюме Моя проблема заключалась в том, что я пытался использовать "пакетный URI" в процессе до того, как был создан какой-либо элемент управления WPF/window/etc, поэтому схема URI "pack" еще не была зарегистрирована (другим требованиям WPF "материал" также не нужно быть установленным, потому что вручную регистрация схемы пакета сама по себе не устраняет проблему). Решение заключалось в том, чтобы дождаться, пока не создадим экземпляр моего пользовательского элемента управления WPF для использования URI пакета.