便利なコードパーツ集!

やまろうのプログラミングTips

Java

JavaでランダムなJPEG画像を描画する

投稿日:

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

んじゃ
             やまろう

スポンサーリンク

-Java

Copyright© やまろうのプログラミングTips , 2022 AllRights Reserved Powered by AFFINGER4.