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作ったリーナス・トーバルスも
数学が得意だったそうだからねぇ。より上を目指すなら、数学も必要かもしれない
っすな!
んじゃ
やまろう