Web検索はbingがおすすめ!

実行ファイル中にリソースを埋め込み、実行時にリソースにアクセスする - C#

実行ファイルにリソースを埋め込み、プログラムから埋め込んだリソースにアクセスする方法を紹介します。

手順

はじめに、リソースを作成します。今回は下図の画像を作成しました。

画像はPNG形式の画像ファイルとして保存しました。
次に作成したリソース画像をプロジェクトに追加します。ソリューションエクスプローラを選択し、右クリックでポップアップメニューを表示します。[追加]メニューの[既存の項目]メニューを選択します。ファイル選択ダイアログボックスが表示されるので、先ほど作成したPNG形式の画像を選択します。


ソリューションエクスプローラにファイルが追加されたことが確認できました。


次に、ソリューションエクスプローラの追加したファイル(res.png)を選択し、プロパティウィンドウの[ビルドアクション]プロパティを確認します。ビルドアクションをデフォルトでは[コンテンツ]になっていますのでこれを[埋め込まれたリソース]に変更します。
[埋め込まれたリソース]に変更、はよく設定し忘れますので注意してください。

UI

フォームを設計します。今回はButtonを1つとPanelを一つ配置しました。

コード

ButtonのClickイベントを実装します。
Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
using System.IO;

namespace ResourceAccess
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      Assembly assembly = Assembly.GetExecutingAssembly();
      Stream stream = assembly.GetManifestResourceStream("ResourceAccess.res.png");
      Bitmap bmp = new Bitmap(stream);

      Graphics g = panel1.CreateGraphics();
      g.DrawImage(bmp,new Point(10,10));

    }
  }
}

説明

Assembly assembly = Assembly.GetExecutingAssembly();
にて現在の実行ファイルのアセンブリを取得します。

Stream stream = assembly.GetManifestResourceStream("ResourceAccess.res.png");
にて、現在のアセンブリに埋め込まれたリソースのストリームを取得します。リソース名は
(実行ファイルの名前空間).(追加したファイル名)
となります。

Bitmap bmp = new Bitmap(stream);
にて取得したストリームを用いBitmapを読み込みます。

Graphics g = panel1.CreateGraphics();
g.DrawImage(bmp,new Point(10,10));
読み込んだビットマップをPanelのキャンバスに描画します。

実行結果

プログラムを実行しボタンを押すとリソースとして組み込んだ画像がPanel1の内部に表示されます。

サブフォルダに画像を配置した場合

下図のpic1.pngのようにサブフォルダに画像を配置した場合は、サブフォルダを含めた名前空間を指定する必要があります。リソース名は
"ResourceAccess.fig.pic1.png"
となります。


著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2010-06-28
iPentec all rights reserverd.