私のアセンブリには、BuildAction==Resource のイメージが含まれています。この埋め込みリソースから BitmapImage を取得したいと考えています。
次のように、ファイルから BitmapImage をロードできます。
var bitmap = new BitmapImage(new Uri(path));
しかし、埋め込まれたリソース イメージを参照する Uri を作成するにはどうすればよいでしょうか。
「 pack URI」(pack://application:,,,/MyImage.png
またはなど)を作成しようとするとpack://application:,,,/MyAssembly;component/MyImage.png
、例外がスローされます:
System.UriFormatException 「無効な URI: コロン (':') が存在するため、ポートが予期されましたが、ポートを解析できませんでした。」
このブログ投稿の UriFormatException に対する修正を見つけました
ただし、その修正を適用しても、パック URI から BitmapImage を読み込もうとすると例外が発生します。
形式を使用するpack://application:,,,/Image.png
と NullReferenceException が発生し、pack://application:,,,/AssemblyName;component/Image.png
形式を使用すると NotSupportedException 「Uri プレフィックスが認識されません」が発生します。
まとめ 私の問題は、WPF コントロール/ウィンドウ/etc がインスタンス化される前にプロセスで「パック URI」を使用しようとしていたため、「パック」URI スキームがまだ登録されていなかったことです (他の WPF に必要な「スタッフ」もパックスキームを手動で登録しても問題は解決しないため、設定しないでください)。解決策は、WPF ユーザーコントロールをインスタンス化してパック URI を使用するまで待つことでした。