- PR -

JAI(java Advanced Imaging)の利用方法

1
投稿者投稿内容
未記入
会議室デビュー日: 2004/07/08
投稿数: 10
投稿日時: 2004-07-08 13:49
今度、javaアプリケーションの開発で、
JAIを使用する事になりました。
Webページを色々と検索してみましたが、
ほとんどが英語のWebページしかヒットしませんでした。
英語が苦手な事とjava経験が浅いため四苦八苦しております。
具体的にどんな事を行いたいかと言うと、
例えば
$ java Hogehoge image.jpg 2 2
と行うと元画像が2*2の4ファイルに分割される
プログラムを作成したいと思っております。
どうかどなたかご教授をお願い致します。
Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2004-07-09 00:46
未記入さん、こんにちは。

日文で書かれた J2SE 1.4 API ドキュメントを読んで作業したら
いかがでしょうか?

以下は、私のやり方です。(4分割に適用したことないので、
若干の誤りがあるかもしれませんが。)
1. ファイル名から java.net.URLのオブジェクト作成。
2. java.awt.Toolkit使って、java.awt.Imageのオブジェクト作成。
3. そのイメージのサイズを参考に分割サイズ求めて、
  java.awt.image.BufferdImageのオブジェクト作成。
4. そのバッファイメージから、 java.awt.Graphicsのオブジェクト取得、
5. そのグラフィックに対して、2.で作ったイメージを drawImage()する
  このとき、分割した一部分の領域を指定すること。
6. javax.imageio.ImageIO.write()でファイル等に書き出す。
  ファイルフォーマットは、"jpg"または "png"が良いと思う。
  "gif"はうまく行かないはず。
7. 必要な分割の分を繰り返し、必要なら後始末する。

もっと、いい方法あると思いますが、取り急ぎ。
未記入
大ベテラン
会議室デビュー日: 2003/11/24
投稿数: 121
投稿日時: 2004-07-09 08:23
ImageIO で十分だと思います。

1. BufferedImage img = ImageIO.read(new File("image.jpg"));
2. BufferedImage subimg = img.getSubimage(x, y, w, h);
3. ImageIO.write(subimage, "jpeg", new File("output.jpg"));

2. 〜 3. は必要なだけ繰り返してください。
未記入
会議室デビュー日: 2004/07/08
投稿数: 10
投稿日時: 2004-07-09 10:06
以下までは作成できているのですが、
肝心の部分が抜けています。
javaはあまり詳しくないので申し訳ありませんが
具体的にどんな風に書けば良いか
どうかご教授くださいませ。

ちなみに対応しなければいけない画像フォーマットは、
「EMF、BMP、JPG、TIF、PNG、PCT、WMF」になります。

javaはわからないし、マニュアルは英語だしで
少々てんぱっています。


------------------------------------------------------------
import java.awt.Image;
import java.io.IOException;

import javax.media.jai.Interpolation;
import javax.media.jai.JAI;
import javax.media.jai.RenderedOp;

import com.sun.media.jai.codec.FileSeekableStream;

/*
* 作成日: 2004/07/08
*
* この生成されたコメントの挿入されるテンプレートを変更するため
* ウィンドウ > 設定 > Java > コード生成 > コードとコメント
*/

/**
* @author hoge
*
* この生成されたコメントの挿入されるテンプレートを変更するため
* ウィンドウ > 設定 > Java > コード生成 > コードとコメント
*/
public class Hogehoge {

/**
* @param fileName
* @param height
* @param width
*/
private void split(String fileName, int height, int width) {
int originalHeight = 0;
int originalWidth = 0;
int total = 0;
float splitHeight = 0;
float splitWidth = 0;
Image[] imgBuff = null;

FileSeekableStream stream = null;

try {
stream = new FileSeekableStream(fileName);
} catch (IOException e) {
}

// 画像データの読み込み
RenderedOp image = JAI.create("stream", stream);
Interpolation interp =
Interpolation.getInstance(Interpolation.INTERP_BILINEAR);

// 画像データの情報取得
originalHeight = image.getHeight(); // 現在の縦
originalWidth = image.getWidth(); // 現在の横
total = height * width;
splitHeight = (float) originalHeight / (float) height; // 分割の縦
splitWidth = (float) originalWidth / (float) width; // 分割の横

// 画像分割



}

public static void main(String[] args) {
String fileName = args[0]; // イメージファイル名
int height = Integer.parseInt(args[1]); // 縦に分割する数
int width = Integer.parseInt(args[2]); // 横に分割する数

Hogehoge obj = new Hogehoge();
obj.split(fileName, height, width);
}

}
1

スキルアップ/キャリアアップ(JOB@IT)