2009-05-13 17 views
34

私のアセンブリには、BuildAction == Resourceのイメージが含まれています。この埋め込みリソースからBitmapImageを取得したいと思います。リソースからBitmapImageを取得するにはどうすればよいですか?

私はこのようなファイルからのBitmapImageをロードすることができます。

var bitmap = new BitmapImage(new Uri(path)); 

しかし、埋め込みリソースの画像を参照することをどのように私はウリを作成しますか?

私がしようとすると(例えば、pack://application:,,,/MyImage.pngまたはpack://application:,,,/MyAssembly;component/MyImage.png用)「pack URI」を作成すると、例外がスローされます。

System.UriFormatException 「無効なURI:コロンがあるのため、ポートが(期待されたが':')は存在しますが、ポートを解析できませんでした。それは、修正プログラムを適用して

は、私はまだパックURIからのBitmapImageをロードしようとした例外を取得します。しかし、このblog post

にUriFormatExceptionに、修正を発見しました。

pack://application:,,,/Image.png形式を使用すると、NullReferenceExceptionが発生し、pack://application:,,,/AssemblyName;component/Image.png形式を使用すると、NotSupportedException "Uri接頭辞が認識されません"が表示されます。


概要は 私の問題は、私はすべてのWPFコントロール/ウィンドウの/ etcの前工程で「URIをパック」を使用しようとしていたということでしたインスタンス化されていたので、「パック」URIスキームはまだありませんでした手動で登録したパックスキームでは問題が解決されないため、他のWPFで必要な 'stuff'も設定する必要があります。解決策は、パックURIを使用するためにWPFのユーザーコントロールをインスタンス化した後まで待機することでした。

+1

問題の概要をおねがいします。私は同じ問題を抱えており、あなたが示唆するようにそれを回避しようとします。 – Oskar

+0

[BitmapImageをコードに読み込む]の可能な複製(http://stackoverflow.com/questions/801833/loading-bitmapimage-in-code) –

答えて

20

This MSDN pageには、WPFのリソースURI(しばしばパックURIと呼ばれる)について知りたいと思うすべての情報があります。 の相対URIをとしたい場合は、を参照してください。特に表4を参照してください。

リソース(pack)URIの概要を表示する場合は、this blog postを参照してください。これは、構文が実際に比較的簡単であることを示しています

pack://application:,,,/ResourceFile.xaml 

pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml 

はしかし、(私の経験で)出て動作するようにいくつかの癖がありますので、多くの場合、正しいリソースURIを見つけることが、実験のビットを必要とします。

+1

@mackenir:*編集した*質問に投稿したURL私の返答を書いた時点でまだ現れていなかった。無礼はあなたに良い答えを得るつもりはありません。 – Noldorin

+1

申し訳ありません!私は質問を編集したことを忘れて、それを信じているかどうかは分かりません。 – mackenir

+1

@mackenir:その場合は心配はありません。 MSDNページの表4に示す相対URIを使用してみましたか?あなたはそれにもっと運があるかもしれません... – Noldorin

関連する問題