Image

ナンバープレイスで使用する Image 描画の基本です。

前田稔の超初心者のプログラム入門

Image View

  1. 私のナンプレ(数独)のプログラムでは、画像を描画するのに Class を使っています。
    ナンプレのプログラムを説明する前に、画像描画の基本をおさえておきましょう。
    今回は透明色が必要なので、最も手軽な GIF 形式の画像を使用します。
  2. Image 画像を描画する IMAGE Class です。
    IMAGE Class の詳細は キー操作で画像を移動する を参照して下さい。
    class IMAGE
    {
        public  Bitmap  bmp;
        public  IMAGE(string file)
        {
            try
            {   bmp= new Bitmap(file);  }
            catch
            {   MessageBox.Show("イメージが取得できません", "Error");  }
        }
    
        public void View(Graphics g, int x, int y)
        {   if (bmp!=null)  g.DrawImage(bmp,x,y);  }
    }
    
  3. 画像を切り分けて描画する Card Class です。
    Card Class の詳細は カードを描画 を参照して下さい。
    class Card
    {
        public  Bitmap  bmp;
        public  int     W;      //Sprite の幅
        public  int     H;      //Sprite の高さ
        public  int     N;      //横の枚数
    
        // Constructor
        public Card(string file, int w, int h)
        {
            try
            {   bmp= new Bitmap(file);   }
            catch
            {   MessageBox.Show("イメージが取得できません", "Error");
                return;
            }
            W= w;
            H= h;
            N = bmp.Width / w;
        }
    
        // 画像全体を描画
        public void View(Graphics g, int x, int y)
        {
            if (bmp!=null)  g.DrawImage(bmp,x,y);
        }
        // Sprite を描画
        public void View(Graphics g, int n, int x, int y)
        {
            Rectangle des = new Rectangle(x, y, W, H);
            Rectangle sou = new Rectangle((n%N)*W,(n/N)*H,W,H);
    
            if (bmp != null)
                g.DrawImage(bmp,des,sou,GraphicsUnit.Pixel);  
        }
    }
    
  4. CSForm() ではマウスのクリックで画像を切り替えてみました。
    back.gif, number.gif, minicor.gif, color.gif の画像を "c:\data\test\" のホルダーに格納してテストしています。
    これらの画像は ナンプレ・ガイド に掲載しています。
    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    public class MyForm : Form
    {
        IMAGE       m_back;     //盤全体
        IMAGE       m_number;   //選択画像
        Card        m_num;      //1~9の数字
        Card        m_color;    //背景色
        int         num;
    
        public MyForm()
        {
            Width = 600;
            Height = 700;
            m_back = new IMAGE(@"c:\data\test\back.gif");
            m_number = new IMAGE(@"c:\data\test\number.gif");
            m_num = new Card(@"c:\data\test\minicor.gif",20,20);
            m_color = new Card(@"c:\data\test\color.gif",60,60);
            Paint += new PaintEventHandler(MyHandler);
            MouseDown += new MouseEventHandler(OnMyMouseDown);
            num = 0;
        }
    
        // カードを描画
        private void MyHandler(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            if (m_back.bmp == null)    Application.Exit();
            m_number.View(g,10,560);
            m_color.View(g, num, 130, 130);
            m_num.View(g, num, 130, 130);
            m_back.View(g,10,10);
        }
    
        // クリックで切り替える
        private void OnMyMouseDown(object sender, MouseEventArgs e)
        {
            num= (num+1)%6;
            Invalidate();
        }
    }
    

[Next Chapter ↓] Layout
[Previous Chapter ↑] ナンプレ・ガイド

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