フラッシュ・アニメーション「ケロロ」3月22日(土)夜7時よりスタート!
アニメ『ケロロ』(2014)
フラッシュアニメのケロロです。いつ放送してたのかも知りませんでしたが、見放題チャンネルを探してみてみようかと思います。
さすがにケロロの目ぐらいなら、私でも描けるかなあと思いましたが、
全然ダメです。きれいな「まる」になりません。まだまだ練習が足りません。
しかし、ただ円をなぞるだけの練習っていうのも、またすぐ飽きてしまうので、模範になる絵をなぞる練習ができるツールに改造したいと思います。
コントロールの配置はこのようにします。
Formの上にPictureBoxを2つ乗せただけです。
模範とする画像は、この画像を使います。自分で描いてるので模範とは言えませんが。
模範画像の上の透明の板をペンタブでなぞって練習する、こんなイメージです。
PictureBox pb1は、模範画像を表示用で、その上のPictureBox pb2がペンタブ練習用です。
「ペンタブ初心者用のまる練習用ツールを作る(その2)」で作成したツールからの改造箇所です。※左の行番号は、最後に乗せてるソースの行番号です。
7 Image img = Image.FromFile("./sample-eye.png");
8 PictureBox pb1 = new PictureBox();
9 PictureBox pb2 = new PictureBox();
模範画像をロードして、PictureBoxを二つ用意。
19 pb1.Dock = DockStyle.Fill;
20 pb1.BackColor = Color.Transparent;
21 pb1.Image = img;
22
23 pb2.Dock = DockStyle.Fill;
24 pb2.BackColor = Color.Transparent;
25 pb2.Image = bmp;
BackColorにColor.Transparentを設定して、透明化していますが、本来透明化するのは、ペンタブ練習用のpb2だけでよいです。
pb1をpb2の親とすることで、pb2からpb1の模範画像を板ガラス越しに表示することができます。
31 Controls.Add(pb1);
32 pb1.Controls.Add(pb2);
ペンタブを離して、一定時間経過すると、pb2で描いていた画像をクリアしますが、クリアするのに、Color.Transparentを使ってます。
56 void OnTimer(object sender, EventArgs e){
57 t.Enabled = false;
58 Graphics g = Graphics.FromImage(bmp);
59 g.Clear(Color.Transparent);
60 pb2.Invalidate();
61 g.Dispose();
62 }
ソース全体です。cscコマンドでビルドすればexeファイルができます。
1 using System;
2 using System.Drawing;
3 using System.Windows.Forms;
4
5 class Test : Form
6 {
7 Image img = Image.FromFile("./sample-eye.png");
8 PictureBox pb1 = new PictureBox();
9 PictureBox pb2 = new PictureBox();
10 Bitmap bmp = new Bitmap(640,480);
11 bool pen = false;
12 Timer t;
13
14 Test()
15 {
16 this.Text = "目を描く練習";
17 this.Size = new Size(img.Width+40,img.Height+40);
18
19 pb1.Dock = DockStyle.Fill;
20 pb1.BackColor = Color.Transparent;
21 pb1.Image = img;
22
23 pb2.Dock = DockStyle.Fill;
24 pb2.BackColor = Color.Transparent;
25 pb2.Image = bmp;
26
27 pb2.MouseDown += new MouseEventHandler(MouseDown);
28 pb2.MouseMove += new MouseEventHandler(MouseMove);
29 pb2.MouseUp += new MouseEventHandler(MouseUp);
30
31 Controls.Add(pb1);
32 pb1.Controls.Add(pb2);
33
34 t = new Timer();
35 t.Interval = 500;
36 t.Tick += new EventHandler(OnTimer);
37 }
38 new void MouseDown(object sender, MouseEventArgs e){
39 pen = true;
40 bmp.SetPixel(e.X,e.Y,Color.Green);
41 pb2.Invalidate();
42 }
43 new void MouseMove(object sender, MouseEventArgs e){
44 if(pen == true){
45 Graphics g = Graphics.FromImage(bmp);
46 Rectangle r = new Rectangle(e.X-2, e.Y-2, 5, 5);
47 g.FillEllipse(Brushes.Black, r);
48 pb2.Invalidate();
49 g.Dispose();
50 }
51 }
52 new void MouseUp(object sender, MouseEventArgs e){
53 pen = false;
54 t.Enabled = true;
55 }
56 void OnTimer(object sender, EventArgs e){
57 t.Enabled = false;
58 Graphics g = Graphics.FromImage(bmp);
59 g.Clear(Color.Transparent);
60 pb2.Invalidate();
61 g.Dispose();
62 }
63 [STAThread]
64 public static void Main()
65 {
66 Application.Run(new Test());
67 }
68 }
maru 3


コメント