ペンタブ初心者用のまる練習用ツールを作る(その1)

TVアニメ『月がきれい』第1話「春と修羅」

アニメ『月がきれい』

やさしい絵と主人公たちの純粋さがすごく癒しです。こういう子たちは大人になっても純粋なままなんだろうなあと思います。

毎日練習してたらアニメ絵が描けるようになるのか」ぐらいから、毎日一枚顔を描く練習をしていますが、まあ一日一枚は練習として少な過ぎなんでしょうけど、なかなか上手くなりません。

そもそも顔の前に、線が描けていない気がします。いろいろ調べたら、「まる」を描く練習をしてみると、ペンタブの練習になりそうなので、「まる練習用ツール」を作ることにしました。

マウスダウン時に点を描画するC#プログラムです。

     1	using System;
     2	using System.Drawing;
     3	using System.Windows.Forms;
     4	
     5	class Test : Form
     6	{
     7	    PictureBox pb = new PictureBox();
     8	    Bitmap bmp = new Bitmap(640,480);
     9	    bool pen = false;
    10	
    11	    Test()
    12	    {
    13	        pb.Dock = DockStyle.Fill;
    14	        pb.Image = bmp;
    15	
    16	        pb.MouseDown += new MouseEventHandler(MouseDown);
    17	        pb.MouseMove += new MouseEventHandler(MouseMove);
    18	        pb.MouseUp += new MouseEventHandler(MouseUp);
    19	
    20	        Controls.Add(pb);
    21	    }
    22	    new void MouseDown(object sender, MouseEventArgs e){
    23	        pen = true;
    24	        bmp.SetPixel(e.X,e.Y,Color.Green);
    25	        pb.Invalidate();
    26	    }
    27	    new void MouseMove(object sender, MouseEventArgs e){
    28	        if(pen == true){
    29	            bmp.SetPixel(e.X,e.Y,Color.Green);
    30	            pb.Invalidate();
    31	        }
    32	    }
    33	    new void MouseUp(object sender, MouseEventArgs e){
    34	        pen = false;
    35	    }
    36	    [STAThread]
    37	    public static void Main()
    38	    {
    39	        Application.Run(new Test());
    40	    }
    41	}

これを改造して、まる練習ツールにします。

いろいろ検討しましたが、一番自分に合ってそうな練習は、ひたすら「まる」を描くことなので、
マウスアップから一定時間経過したら、ウィンドウをクリアするプログラムに改造します。

Timerを使います。Timerの使い方のサンプルです。

     1	using System;
     2	using System.Drawing;
     3	using System.Windows.Forms;
     4	
     5	class Test : Form
     6	{
     7	    Timer t;
     8	    Test()
     9	    {
    10	        this.Size = new Size(300,200);
    11	
    12	        t = new Timer();
    13	        t.Enabled = true;
    14	        t.Interval = 5000;  // 5 sec
    15	        t.Tick += new EventHandler(OnTimer);
    16	    }
    17	    void OnTimer(object sender, EventArgs e)
    18	    {
    19	        Application.Exit();
    20	    }   
    21	    [STAThread]
    22	    public static void Main()
    23	    {
    24	        Application.Run(new Test());
    25	    }
    26	}

最初のマウス描画のプログラムにTimer処理をミックスします。500msで画面をクリアするようにしました。

     1	using System;
     2	using System.Drawing;
     3	using System.Windows.Forms;
     4	
     5	class Test : Form
     6	{
     7	    PictureBox pb = new PictureBox();
     8	    Bitmap bmp = new Bitmap(640,480);
     9	    bool pen = false;
    10	    Timer t;
    11	
    12	    Test()
    13	    {
    14	        this.Size = new Size(640,480);
    15	        pb.Dock = DockStyle.Fill;
    16	        pb.Image = bmp;
    17	
    18	        pb.MouseDown += new MouseEventHandler(MouseDown);
    19	        pb.MouseMove += new MouseEventHandler(MouseMove);
    20	        pb.MouseUp += new MouseEventHandler(MouseUp);
    21	
    22	        Controls.Add(pb);
    23	
    24	        t = new Timer();
    25	        t.Interval = 500;
    26	        t.Tick += new EventHandler(OnTimer);
    27	    }
    28	    new void MouseDown(object sender, MouseEventArgs e){
    29	        pen = true;
    30	        bmp.SetPixel(e.X,e.Y,Color.Green);
    31	        pb.Invalidate();
    32	    }
    33	    new void MouseMove(object sender, MouseEventArgs e){
    34	        if(pen == true){
    35	            Graphics g = Graphics.FromImage(bmp);
    36	            Rectangle r = new Rectangle(e.X-10, e.Y-10, 21, 21);
    37	            g.FillEllipse(Brushes.Black, r);
    38	            pb.Invalidate();
    39	            g.Dispose();
    40	        }
    41	    }
    42	    new void MouseUp(object sender, MouseEventArgs e){
    43	        pen = false;
    44	        t.Enabled = true;
    45	    }
    46	    void OnTimer(object sender, EventArgs e){
    47	        t.Enabled = false;
    48	        Graphics g = Graphics.FromImage(bmp);
    49	
    50	        Rectangle r = new Rectangle(0, 0, 640, 480);
    51	        g.FillRectangle(Brushes.White, r);
    52	        pb.Invalidate();
    53	
    54	        g.Dispose();
    55	    }
    56	    [STAThread]
    57	    public static void Main()
    58	    {
    59	        Application.Run(new Test());
    60	    }
    61	}
maru 1

コメント

  1. […] 「まる練習用ツールをC#で作る」で作ったツールでまるの練習をしているので、たぬきぐらいは描けるようになったかなあと描いてみたのですが、やっぱり下手です。 […]

タイトルとURLをコピーしました