アプリ版:「スタンプのみでお礼する」機能のリリースについて

歴史ものの小説を読んで、任意の風景を鉄格子のなかからみたような画像を作成しようと思いました。

ただ、正確に等間隔で複数の直方体を描画するのは、手作業だと大変ですので、唯一使えるJavaを利用して画像を加工しようと考えました。

PCのディレクトリからJavaで読み込んだjpg画像に、画像のピクセル単位で、横40pxにつき10pxに黒線を入れる処理を行いたいと思います。

つまり200px*100pxの画像なら、横から30-40、70-80、110-120、150-160、190-200のpxに縦の長さ100px黒線を入れる、という感じです。

ただJavaは基本をマスターしたのですが、Java2Dは使用したことがなく、どうすればいいのか皆目見当がつきません。

丸投げなので申し訳ないのですが、どなたか指定した処理をするJavaプログラムのコードのお手本を書いていただけないでしょうか。

自分で作れと言われれば返す言葉もないのですが、私自身も初学者ながらJavaを勉強中ですので、きれいなコードを見てみたいという気持ちもあります。

Java2Dの本は先日Amazonで注文しましたので、ご教示いただいたコードの意味を一つ一つ調べ上げて理解し、勉強し、そこから自身の画像処理の技術を発達させ、よりJavaプログラミングの研さんに励みたいと思います。

どなたかご教示のほど、どうかよろしくお願いします。

A 回答 (1件)

 こんにちは。


 サンプルとしては、こんな感じでしょうか。

java DrawLine c:\test.jpg

 みたいな感じで使います。

(コンパイルするときは全角スペースを半角スペースに置換してからにしてください)

public class DrawLine {
  public static void main(String[] args) {
    if (args.length < 1)
      System.exit(1);

    try {
      File file = new File(args[0]);
      BufferedImage image = ImageIO.read(file);
      drawImage(image);
      ImageIO.write(image, "jpeg", new File(file.getParent(), "new.jpg"));
    } catch (IOException ex){
      System.out.println("画像ファイルのアクセスに失敗しました。");
      System.exit(1);
    }
  }

  static BufferedImage drawImage(BufferedImage image) {
    Graphics2D g = image.createGraphics();
    g.setColor(Color.BLACK);
    int height = image.getHeight();
    int width = image.getWidth();
    for (int x = 30; x < width; x += 40) {
      g.fillRect(x, 0, 10, height);
    }
    g.dispose();
    return image;
  }
}
    • good
    • 0
この回答へのお礼

ご丁寧な回答ありがとうございます。
大変参考にさせていただきました。最下部を編集することでいろいろ応用が効きそうですね。

頑張って理解したいと思います。ありがとうございました。

お礼日時:2011/01/12 21:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!