リソースで取り込んだイメージを描画する

C# で GIF 画像をリソースとして取り込んで、DrawImage で描画します。
リソースとして取り込むと .EXE ファイルの中に直接イメージを埋め込むことが出来ます。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プログラムの説明

  1. フォルダーに次のファイルを格納して、プロジェクト(ImageResource)に取り込んで下さい。
    プロジェクトの作成は Form を作成する を参照して下さい。
    自動生成を使って Form を作成 の場合も同じ要領です。
    ソースコードです。
    /*********************************************************/
    /*★ リソースで取り込んだイメージを描画する    前田 稔 ★*/
    /*********************************************************/
    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    public class MyForm : Form
    {
        public MyForm()
        {
            Text = "リソースで取り込んだ Image を表示する";
            BackColor = SystemColors.AppWorkspace;
            Width  = 800;
            Height = 640;
            Paint += new PaintEventHandler(MyHandler);
        }
    
        private void MyHandler(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            try
            {
                g.DrawImage(new Bitmap(GetType(),"ImageResource.test.gif"), new PointF(50F,50F));
            }
            catch
            {
                MessageBox.Show("イメージが取得できません","Error");
                return;
            }
        }
    }
    
    class ImageResource
    {
        public static void Main()
        {
            MyForm mf = new MyForm();
            Application.Run(mf);
        }
    }
    
  2. リソースにイメージを取り込みます。
    1. 描画するイメージファイルをプロジェクトのフォルダーに格納して下さい。
      場所はどこでもOKなのですが、プロジェクトのフォルダーに格納するのが解りやすいでしょう。
      BMP に限らず、GIF, JPG, TIF, PNG なども描画出来ます。
    2. ソリューション・エクスプローラで、プロジェクト名(ImageResource)を右クリックします。
    3. 「追加」「既存項目」で目的のイメージファイルを選択します。
    4. 追加されたイメージファイルのプロパティで、ビルドアクションを「埋め込まれたリソース」に設定します。
    5. 今回のソースコードでは、イメージファイルの名前は "ImageResource.test.gif" になっています。
      ImageResource は名前空間で、通常はプロジェクト名が規定値となります。
      test.gif がこのプログラムで表示する透明色を設定した GIF 画像です。
  3. MyForm では、ウインドウのキャプションと背景色を設定して、サイズを広げています。
    そして Paint にウインドウを描画するメソッド(MyHandler)を設定します。
  4. MyHandler() で From にイメージを表示します。
    1. パラメータ(PaintEventArgs e)を受け取って Graphics g を設定します。
      Graphics とはウインドウに描画するためのハンドル(デバイスコンテキスト)のようなものでしょうか?
    2. DrawImage() でファイルから画像を入力して描画します。
      このとき、リソースが正しく設定されていないとエラーで落ちてしまいます。
      そこで失敗したときにメッセージを表示して描画をパスするために「try と catch」を使っています。
    3. 入力するファイルが透過 GIF のときは、透明色が有効です。
    4. new PointF(50F, 50F) が表示する左上の座標です。

Windows 8.1

  1. 久しぶりに Windows 8.1(2014/04/13 Update 版に更新) & Visual Studio 2005 の環境で確かめてみました。
    大きな違いはありませんが、開発環境が変われば多少説明と異なる場合があります。
    上記で説明したプロジェクトも問題なく起動出来たのですが、新規に Resources Class が導入され大分様子が変わっています。
  2. C# の自動生成を使って WindowsApplication1 を作成します。
    ペイントイベントのメソッドを設定して、MyHandler() をコーディングして下さい。
    Form に二本の線が描画されます。
    詳しい説明は 線を描画する を参照して下さい。
        public partial class Form1 : Form
        {   public Form1()
            {   InitializeComponent();
                Paint += new PaintEventHandler(MyHandler);
            }
            private void MyHandler(object sender, PaintEventArgs e)
            {
                Graphics g = e.Graphics;
                g.DrawLine(new Pen(Color.Red),10,50,280,50);
                g.DrawLine(new Pen(Color.Green,10),10,150,280,150);
            }
        }
    
  3. test.gif をプロジェクトのフォルダーに格納して下さい。
    画像は何でもよく、適当なものを調達してきて下さい。
    jpg でも BMP でも構いません。
  4. ソリューションエクスプローラから Propaeties/Resources.resx(拡張子が .resx)をダブルクリックします。
    リソースのウインドウが表示されます。
    リソースの追加タブから[既存のファイルの追加]を選びます。
    プロジェクトのフォルダから test.gif を選ぶとリソース画面に画像が表示されます。
    .resx ファイルに直接読み込まれたリソースは埋め込みリソースになります。
  5. リソースから画像(test.gif)を取得して描画します。
            private void MyHandler(object sender, PaintEventArgs e)
            {   Graphics g = e.Graphics;
                try
                {   System.Drawing.Bitmap bitmap1 =
                        WindowsApplication1.Properties.Resources.test;
                    g.DrawImage(bitmap1, new PointF(50F, 50F));
                }
                catch
                {   MessageBox.Show("イメージが取得できません","Error");
                    return;
                }
            }
    
  6. リソース は Properties\Resources.resx に組み込まれています。
    Class は Properties\Resources.Designer.cs で定義されています。
    ソースコードを確かめてみて下さい。
  7. リソースで取り込んだイメージは .EXE に埋め込まれるので、元の画像ファイルが無くても描画出来ます。
    作成された .EXE を別のフォルダーにコピーして、元の画像ファイルが無くても描画できることを確かめて下さい。

超初心者のプログラム入門(C# Frame Work)