画像描画 etc

画像を「拡大縮小・反転・回転・平行四辺形の変形」などで描画します。

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

拡大縮小・反転

  1. 画像を「拡大縮小・反転・回転・平行四辺形の変形」などで描画します。
    ページ先頭の画像を参照して下さい。
    左上から「描画①~描画④」、二段目から「描画⑤~描画⑦」です。
  2. 拡大縮小・反転から説明しましょう。
    事前に @"c:\data\test\kishi.gif" を用意して下さい。
    /***************************************/
    /*★ 画像描画のエトセトラ    前田 稔 ★*/
    /***************************************/
    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    public class MyForm : Form
    {
        string  file = @"c:\data\test\kishi.gif";
    
        public MyForm()
        {
            Text = "Image etc";
            BackColor = SystemColors.AppWorkspace;
            Width  = 420;
            Height = 250;
            Paint += new PaintEventHandler(MyHandler);
        }
    
        private void MyHandler(object sender, PaintEventArgs e)
        {
            Bitmap bmpw = new Bitmap(file);
            Bitmap bmp = new Bitmap(bmpw,100,100);
            Graphics g = e.Graphics;
            g.DrawImage(bmp,0,0);                           //描画①
            g.DrawImage(bmp, new Rectangle(100,0,50,50));   //描画②
            g.DrawImage(bmp, 300, 0, -100, 100);            //描画③
            g.DrawImage(bmp, 300, 100, 100, -100);          //描画④
        }
    }
    
    class image01
    {
        public static void Main()
        {
            MyForm mf = new MyForm();
            Application.Run(mf);
        }
    }
    
  3. 最初に描画座標を計算し易いように、元の画像のサイズを 100*100 に調整します。
            Bitmap bmpw = new Bitmap(file);
            Bitmap bmp = new Bitmap(bmpw,100,100);
        
  4. 画像を縮小して描画します。
    100,0 が描画の座標で、50,50 が幅と高さです。
    画像の拡大も同じ要領です。
    g.DrawImage(bmp, new Rectangle(100,0,50,50)); //描画②
  5. 画像を左右反転して描画します。
    画像の幅をマイナスにすると左右が反転します。
    描画の座標にも注目して下さい。
    g.DrawImage(bmp, 300, 0, -100, 100); //描画③
  6. 画像を上下反転して描画します。
    画像の高さをマイナスにすると上下が反転します。
    描画の座標にも注目して下さい。
    g.DrawImage(bmp, 300, 100, 100, -100); //描画④

回転・変形

  1. 画像を「回転・平行四辺形の変形」で描画します。
    bmp.RotateFlip(RotateFlipType.Rotate90FlipNone); で bmp のイメージが 90度回転します。
    g.DrawImage(bmp,0,100); で回転したイメージを描画します。
            Bitmap bmp = new Bitmap(bmpw,100,100);
                ・・・
            bmp.RotateFlip(RotateFlipType.Rotate90FlipNone);
            g.DrawImage(bmp,0,100);                         //描画⑤
        
  2. bmp.RotateFlip(RotateFlipType.Rotate90FlipX); で bmp のイメージがさらに 90度回転します。
    前回と合わせて 180度回転したことになります。
    FlipX は左右に反転する指示です。
    これで、上下反転と同じ結果になるでしょう。
    g.DrawImage(bmp,0,100); で回転したイメージを描画します。
            bmp.RotateFlip(RotateFlipType.Rotate90FlipX);
            g.DrawImage(bmp,100,100);                       //描画⑥
        
  3. 平行四辺形の形に変形して描画します。
    Point 構造体の配列で「左上、右上、左下」の座標を設定します。
    右下は平行四辺形なので、自動的に決まります。
        Point[] pnts = new Point[]
        {  new Point(180, 100), new Point(360, 120), new Point(240, 200) };
        
    Point 構造体の配列を使って画像を変形して描画します。
    g.DrawImage(bmp, pnts); //描画⑦

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