Javaでの実装
1.方針
このページでは、具体的にJava を利用して、プログラムを作成し、実行して、計算尺のイメージを作成します。Sun
のJavaであり、MicrosoftのVisual J#.NETではないのでご注意ください。
Javaでは、コマンドプロンプト上で動作するプログラムとして作成するので、Formの作成はありません。
2.コード
クラス名は何でもかまいませんが、ここではSlideRuleMakerとしておきましょう。
Java
|
import java.awt.*;
import java.util.*;
import java.io.*;
import java.awt.image.*;
import javax.imageio.*;
public class SlideRuleMaker
{
public static void main(String[] args)
{
BufferedReader br = null;
try
{
Vector v = new Vector();
String s;
String openFileName = "D:\\Excel.csv";
String saveFileName = "D:\\image.png";
String[] line;
int i;
int length;
int place;
BufferedImage myImage;
Graphics2D myGraphics;
br = new BufferedReader(new InputStreamReader(new FileInputStream(openFileName), "UTF-8"));
while((s = br.readLine()) != null)
{
v.add(s);
}
myImage = new BufferedImage(1000, 100, BufferedImage.TYPE_INT_RGB);
myGraphics = myImage.createGraphics();
myGraphics.setColor(Color.WHITE);
myGraphics.fillRect(0,0,1000,100);
myGraphics.setColor(Color.BLACK);
for(i = 0; i <= v.size() - 1; i++)
{
line = ((String)v.get(i)).split(",");
length = Integer.parseInt(line[2]);
place = (int)(Float.parseFloat(line[1]) * 900 + 50);
switch (length)
{
case 1:
{
myGraphics.drawLine(place,45,place,55);
break;
}
case 2:
{
myGraphics.drawLine(place,40,place,60);
break;
}
case 3:
{
myGraphics.drawLine(place,35,place,65);
break;
}
default:
{
throw new Exception("長さとして不適切な値が設定されました。\n" + s);
}
}
}
ImageIO.write(myImage, "png", new File(saveFileName));
System.out.println("終了しました。");
}
catch (Exception ex)
{
System.out.println(ex.getMessage());
}
finally
{
try
{
br.close();
}
catch (Exception ex)
{
}
}
}
}
|
最終的に完了したファイルを公開しておきます。
3.解説
3.1.ファイルの読み取り
今回は、あらかじめ、すべての行を1行ずつ、Vectorに保存しておきます。
ファイル名が"D:\\Excel.csv"となっているのは"D:\Excel.csv"の間違いではなく、エスケープ文字として判別されるためです。
Java
|
Vector v = new Vector();
String s;
String openFileName = "D:\\Excel.csv";
br = new BufferedReader(new InputStreamReader(new FileInputStream(openFileName), "UTF-8"));
while((s = br.readLine()) != null)
{
v.add(s);
}
|
3.2.イメージの作成
イメージの裏面を白色で塗り、次で利用するために黒色にセットしておきます。
Java
|
BufferedImage myImage;
Graphics2D myGraphics;
myImage = new BufferedImage(1000, 100, BufferedImage.TYPE_INT_RGB);
myGraphics = myImage.createGraphics();
myGraphics.setColor(Color.WHITE);
myGraphics.fillRect(0,0,1000,100);
myGraphics.setColor(Color.BLACK);
|
3.3.メモリの絵画
一行分をコンマで分割して、配列に代入します。場所は配列の1, 長さは配列の2に格納されています。
switch構文で長さによって分類し、それぞれにおいて指定された長さでメモリを刻んでいきます。その際、長さが1,
2, 3以外であった場合は、例外を投げます。
Java
|
String[] line;
int i;
int length;
int place;
for(i = 0; i <= v.size() - 1; i++)
{
line = ((String)v.get(i)).split(",");
length = Integer.parseInt(line[2]);
place = (int)(Float.parseFloat(line[1]) * 900 + 50);
switch (length)
{
case 1:
{
myGraphics.drawLine(place,45,place,55);
break;
}
case 2:
{
myGraphics.drawLine(place,40,place,60);
break;
}
case 3:
{
myGraphics.drawLine(place,35,place,65);
break;
}
default:
{
throw new Exception("長さとして不適切な値が設定されました。\n" + s);
}
}
}
|
3.4.保存と終了の表示
ImageIO.writeメソッドを利用して、保存します。また、終了を知らせます。
Java
|
String saveFileName = "D:\\image.png";
ImageIO.write(myImage, "png", new File(saveFileName));
System.out.println("終了しました。");
|
3.5.エラー処理
今回は自分で利用するだけなので、詳細なエラー処理をする必要はないでしょう。そこで全体をtry
catch構文で囲っておき、エラーを表示させます。
Java
|
try
{
}
catch (Exception ex)
{
System.out.println(ex.getMessage());
}
finally
{
}
|
4.実行
では、実行してみましょう。前のページで作成した.csvファイル名と、保存する.gifファイル名をコード内で指定して実行すると、.pngファイルが作成されます。横の長さを半分にしたものを載せておきます。
後は、このイメージを少し加工します。
5.尺の名前と数字の追加
このイメージに、「C」と「D」という尺の名前と、「1」~「10」の数字を追加します。
「スタート」→「すべてのプログラム」→「アクセサリ」→「ペイント」でペイントを起動します。「ファイル」メニュー→「開く」から、先ほど作成した.gifファイルを開きます。
「ツールボックス」の「テキスト」を利用して、「C」と「D」という尺の名前と、「1」~「10」の数字を追加してください。完了したものは次のような感じです。ただし、横幅は半分にしてあります。
また、C尺とD尺の境目の直線を追加してください。
6.印刷と工作
後は、おなじみの方法です。これを印刷して、切り貼りしてください。詳しい方法は計算尺のイメージからの作成をご覧ください。