「ラブライブ!」TVアニメ1期 アニメーションPV集 前編【スクスタリリース記念!】
アニメ『ラブライブ!』
ケロロ軍曹→ケロロのように、一作目が必ずしも短いタイトルではないと思ってたので、あまり疑ってなかったのですが、サンシャインに、μ’s(ミューズ)というグループ名が出てきたので、もしや! と思い、サンシャインではなく、ラブライブ!が一作目なんだとようやく分かりました。。
ラブライブ!より先に、サンシャイン!を見てしまった。まあ、途中で気づいたので、取り戻せます。
本ブログで作っている「まる訓練ツール」(今命名しました)は、模範画像が一枚だけですので、複数枚表示できるように修正します。
マウスアップ毎に以下の3枚の画像を入れ替えていくツールにしてみます。
まずは、C#でディレクトリ内のファイルを取得する方法から。
takk@deb8:~/Desktop$ cat -n test.cs
1 using System;
2
3 class Test {
4 [STAThread] public static void Main() {
5 string[] files = System.IO.Directory.GetFiles(
6 @"./", "*", System.IO.SearchOption.AllDirectories);
7 foreach(string m in files) {
8 Console.WriteLine("[{0}]",m);
9 }
10 }
11 }
Windowsで動かす場合は、csc.exeがあるディレクトリを探して、パスを通して、ビルドして、実行。
C:\Users\takk>dir C:\Windows /b/s | findstr csc.exe$ C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe C:\Users\takk>set PATH=%PATH%;C:\Windows\Microsoft.NET\Framework\v4.0.30319\ C:\Users\takk>csc test.cs Microsoft (R) Visual C# Compiler Version 4.0.30319.36366 for Microsoft (R) .NET Framework 4.5 Copyright (C) Microsoft Corporation. All rights reserved. C:\Users\takk>test
Linuxの場合は、monoをインストールしてから、mono プログラム名.exeで実行できます。
takk@deb8:~/Desktop$ sudo apt-get install mono-devel mono-mcs takk@deb8:~/Desktop$ mcs test.cs takk@deb8:~/Desktop$ ls test.cs test.exe takk@deb8:~/Desktop$ takk@deb8:~/Desktop$ touch a b c takk@deb8:~/Desktop$ mono test.exe [./a] [./b] [./c] [./test.cs] [./test.exe] takk@deb8:~/Desktop$
ディレクトリのファイルを取得するプログラムを、まる訓練ツールに組み込みます。
まず、必要な変数。画像数は可変なので、配列にしておきます。また、現在どの画像を表示しているかのインデックスとしてfile_noという変数も用意しました。
7 Image[] img;
8 string[] files;
9 int file_no = 0;
画像ファイルの読み込みと、img変数へのセットです。
19 files = System.IO.Directory.GetFiles(
20 @"img", "*.png", System.IO.SearchOption.AllDirectories);
21 img = new Image[files.Length];
22 foreach(string m in files) {
23 img[file_no++]=Image.FromFile(m);
24 }
25 file_no=0;
タイマ満了した時に、画像を切り替えしますので、画像番号の上限チェックしつつインクリメントします。
68 void OnTimer(object sender, EventArgs e){
69 t.Enabled = false;
70 if(++file_no >= files.Length){
71 file_no = 0;
72 }
73 pb1.Image = img[file_no];
74 pb1.Invalidate();
75 Graphics g = Graphics.FromImage(bmp);
76 g.Clear(Color.Transparent);
77 pb2.Invalidate();
78 g.Dispose();
79 }
全プログラムです。
1 using System;
2 using System.Drawing;
3 using System.Windows.Forms;
4
5 class Test : Form
6 {
7 Image[] img;
8 string[] files;
9 int file_no = 0;
10 PictureBox pb1 = new PictureBox();
11 PictureBox pb2 = new PictureBox();
12 Bitmap bmp = new Bitmap(640,480);
13 bool pen = false;
14 Timer t;
15
16 Test()
17 {
18
19 files = System.IO.Directory.GetFiles(
20 @"img", "*.png", System.IO.SearchOption.AllDirectories);
21 img = new Image[files.Length];
22 foreach(string m in files) {
23 img[file_no++]=Image.FromFile(m);
24 }
25 file_no=0;
26
27 this.Text = "目を描く練習";
28 this.Size = new Size(img[0].Width+40,img[0].Height+40);
29
30 pb1.Dock = DockStyle.Fill;
31 pb1.Image = img[file_no];
32 pb1.BackColor = Color.Transparent;
33
34 pb2.Dock = DockStyle.Fill;
35 pb2.BackColor = Color.Transparent;
36 pb2.Image = bmp;
37
38 pb2.MouseDown += new MouseEventHandler(MouseDown);
39 pb2.MouseMove += new MouseEventHandler(MouseMove);
40 pb2.MouseUp += new MouseEventHandler(MouseUp);
41
42 Controls.Add(pb1);
43 pb1.Controls.Add(pb2);
44
45 t = new Timer();
46 t.Interval = 500;
47 t.Tick += new EventHandler(OnTimer);
48 }
49 void DrawPen(int x, int y){
50 Graphics g = Graphics.FromImage(bmp);
51 Rectangle r = new Rectangle(x-2, y-2, 5, 5);
52 g.FillEllipse(Brushes.Black, r);
53 pb2.Invalidate();
54 g.Dispose();
55 }
56 new void MouseDown(object sender, MouseEventArgs e){
57 pen = true;
58 }
59 new void MouseMove(object sender, MouseEventArgs e){
60 if(pen == true){
61 DrawPen(e.X, e.Y);
62 }
63 }
64 new void MouseUp(object sender, MouseEventArgs e){
65 pen = false;
66 t.Enabled = true;
67 }
68 void OnTimer(object sender, EventArgs e){
69 t.Enabled = false;
70 if(++file_no >= files.Length){
71 file_no = 0;
72 }
73 pb1.Image = img[file_no];
74 pb1.Invalidate();
75 Graphics g = Graphics.FromImage(bmp);
76 g.Clear(Color.Transparent);
77 pb2.Invalidate();
78 g.Dispose();
79 }
80 [STAThread]
81 public static void Main()
82 {
83 Application.Run(new Test());
84 }
85 }
maru 4

コメント
[…] 「ペンタブ初心者用のまる練習用ツールを作る(その4)」の続きです。 「ペンタブ初心者用のまる練習用ツールを作る(その4)」までは、Windows.Formsを使ってましたが、せっかくDXライブラリを使い始めたので、DXライブラリを使用するプログラムに変えてみます。 […]