画像リソースの扱い方

昨日メモしたリソースの扱い方(id:siokoshou:20050204)がなかなか複雑だったので、まとめメモ。

1.外部画像ファイル:

pictureBox1.Image = new Bitmap( "neko.jpg" );


2.マニフェストリソース: アセンブリに埋め込まれた画像ファイル(bmp,jpgなど)

2-1.まず画像ファイルをアセンブリに埋め込む

画像ファイルをソリューションエクスプローラでプロジェクトに追加し、ファイルのプロパティのビルドアクションを「埋め込まれたリソース」に変更する。

2-2.読み込み方

testというアセンブリで、neko.jpgを表示する例

Stream stream = this.GetType().Assembly.GetManifestResourceStream( "test.neko.jpg" );
pictureBox2.Image = new Bitmap( stream );

testというアセンブリのresフォルダにあるneko2.jpgを表示する例

// フォルダも含めて指定が必要
pictureBox2.Image = new Bitmap( GetType().Assembly.GetManifestResourceStream( "test.res.neko2.jpg" ) );


(埋め込みリソースの説明は省略。マニフェストリソースに比べてメリットが分からないので。VS.NET2003だとSDKのサンプルを使ってリソースを作る必要があるのが面倒。2005は改善されるらしい。)

しかし、リソースの取り扱い方がなんか変ですね。
例のリソースを表す文字列を正しいものにするのに、長時間はまりました(>_<)。

ところで、「this.GetType().Assembly」の部分はちょっと自信なし。@ITの「Assembly.GetExecutingAssembly()」のほうがいいのかな?