DATE : 2006/08/17 (Thu)
「分割画像の作りかた」では、RenderingHints と ImageLayout を使用することで分割画像を作りました。
もうひとつ、javax.media.jai.TiledImage を使って分割画像を作る方法をメモしておきます。単純に分割画像を作るだけなら、こちらの方が使いやすいと思います。
TiledImage クラスには、コンストラクタが複数ありますが、簡単に分割画像を作るには、TiledImage(java.awt.RenderedImage, int, int) が便利です。int 型引数はそれぞれ、分割された画像片の幅と高さです。
以下に、100×100の大きさの画像片に分割するサンプルを示します。(source 変数に分割対象の画像オブジェクトが入っているとします。また、import 文などは省略しています)
TiledImage tiledImage = new TiledImage(source, 100, 100);
また、原点の座標などを指定するコンストラクタもあります。TiledImage(int, int, int, int, int, int, java.awt.image.SampleModel, java.awt.image.ColorModel) です。初めの2つの引数で原点を、次の2つで画像全体の大きさを、その次の2つで画像片の原点を指定します。また、最後の2つは、画像片のサンプルモデルとカラーモデルです。そのため、画像片の大きさはサンプルモデルで指定します。
以下に、このコンストラクタを使って100×100の画像片の画像を生成するコードを示します。ただし、原点は左上隅の座標(0, 0)とします(分割対象の画像オブジェクトは、source 変数に格納されています)。
// 分割対象の画像と互換性のあるサンプルモデル、カラーモデルを使用する
SampleModel tileSampleModel = source.getSampleModel().
createCompatibleSampleModel(100, 100);
ColorModel colorModel = source.getColorModel();
// 画像全体の大きさ
int width = source.getWidth();
int height = source.getHeight();
TiledImage tiledImage = new TiledImage(0, 0, width, height, 0, 0,
tileSampleModel, colorModel);
tiledImage.set(source);
このコンストラクタでは分割対象の画像を指定できないので、TiledImage#set(java.awt.image.RenderedImage) を使って画像を指定します。
なお、このコンストラクタで指定するサンプルモデルは、分割対象のサンプルモデルと互換性のあるものでなければなりません。そのため、java.awt.image.SampleModel#createCompatibleSampleModel(int, int)を使用して、異なる大きさで互換性のあるサンプルモデルを生成しています。また、カラーモデルについても、コンストラクタで指定したサンプルモデルを扱えるものでなければならないので、ここでは分割対象の画像と同じカラーモデルを使用しています。