2003/12
「絵ぇー描くの苦手な人ー?」 < はーい!
という人におすすめのプログラムに絵をかかせるってのを
やってみたいと思います。ちなみに俺ちゃん、紙に書くなら
そこそこだけど、パソコンで絵を描くのは苦手ですなぁ。
ってなわけで、
java.awt.Graphicsの基本的なメソッドで描ける四角、円、線、文字、
それとjava.util.Randomから生成させた乱数を使ってランダムな絵を
描きたいと思います。
package etc;
import java.util.Random;
import java.awt.*;
import java.io.*;
import java.awt.image.*;
import com.sun.image.codec.jpeg.*;
class JPegImage {
private static final int FRAME_SIZE = 400;
private static char[] character = {'あ'};
public static void main(String[] args) throws Exception{
BufferedImage objBi=new BufferedImage(
FRAME_SIZE,FRAME_SIZE,BufferedImage.TYPE_INT_RGB);
Graphics graphics = objBi.getGraphics();
graphics.setColor(new Color(0,0,0));
graphics.fillRect(0, 0, FRAME_SIZE, FRAME_SIZE);
Random random = new Random();
for (int i = 0; i < FRAME_SIZE; i++) {
setColor(random, graphics);
int[] values = getXYWH(random);
graphics.fillRect(values[0], values[1], values[2], values[3]);
setColor(random, graphics);
values = getXYWH(random);
graphics.drawRect(values[0], values[1], values[2], values[3]);
setColor(random, graphics);
values = getXYWH(random);
graphics.fillOval(values[0], values[1], values[2], values[3]);
setColor(random, graphics);
values = getXYWH(random);
graphics.drawOval(values[0], values[1], values[2], values[3]);
setColor(random, graphics);
int x = random.nextInt(FRAME_SIZE + 1);
int y = random.nextInt(FRAME_SIZE + 1);
int x2 = random.nextInt(FRAME_SIZE + 1);
int y2 = random.nextInt(FRAME_SIZE + 1);
graphics.drawLine(x, y, x2, y2);
}
for (int i = 0; i < FRAME_SIZE; i++) {
setColor(random, graphics);
int[] values = getXYWH(random);
String font = "HG創英角ポップ体";
graphics.setFont(new Font(font, Font.PLAIN, values[3]));
character[0] += values[2];
graphics.drawString(new String(character), values[0], values[1]);
character[0] -= values[2];
}
JPEGImageEncoder objEnc=JPEGCodec.createJPEGEncoder(
new FileOutputStream("image.jpg"));
objEnc.encode(objBi);
}
private static void setColor(Random random, Graphics graphics) {
int r = random.nextInt(256);
int g = random.nextInt(256);
int b = random.nextInt(256);
graphics.setColor(new Color(r, g, b));
}
private static int[] getXYWH(Random random) {
int x = random.nextInt(FRAME_SIZE + 1);
int y = random.nextInt(FRAME_SIZE + 1);
int width = random.nextInt(FRAME_SIZE / 6);
int height = random.nextInt(FRAME_SIZE / 6);
return new int[] {x, y, width, height};
}
}
実行してみよう!
このメルマガを適当な名前(JPegImage.java)で保存して、
>javac -d . *.java
>java etc.JPegImage
するとimage.jpgってファイルが出力されるのでそいつを開いてみてください。
ランダムな四角、円、線、文字(平仮名)が描かれていると思います。
おもしろいっしょー!!
グラフィックプログラミングは楽しいですなー!!数学関数を使えば曲線や
複雑な画像なんかも描けます。って俺ちゃん数学は苦手だったんですけどねぇ。
これを機に数学の勉強しましょうかしら?Linux作ったリーナス・トーバルスも
数学が得意だったそうだからねぇ。より上を目指すなら、数学も必要かもしれない
っすな!
んじゃ
やまろう