category: Java
DATE : 2006/09/10 (Sun)
DATE : 2006/09/10 (Sun)
(前回の記事)
処理の順序を整理する
まず手始めに、addAlpha メソッドの処理の流れを整理します。
とりあえず、「アルファチャンネルを追加した BufferedImage を作成する - 処理手順」に従ってコードを整理します。
整理した addAlpha メソッドは、次の通りです(javadoc コメントは省略しています)
private static RenderedImage addAlphaChannel(RenderedImage image) { // 対象画像の大きさ int width = image.getWidth(); int height = image.getHeight(); // 1 : アルファチャンネル付きのカラーモデルの生成 // 対象画像のカラースペース ColorSpace sourceColorSpace = image.getColorModel(). getColorSpace(); // アルファチャンネルのあるカラーモデル ColorModel destColorModel = new ComponentColorModel( sourceColorSpace, true, false, Transparency.BITMASK, DataBuffer.TYPE_BYTE); // 2 : 1のカラーモデルを扱える WritableRaster の生成 WritableRaster destRaster = destColorModel. createCompatibleWritableRaster(width, height); // 3 : 2の WritableRaster の色成分を設定 // 色成分のバンド番号の配列 int[] colorBandList = getColorBandList(destRaster.getNumBands()); // 色成分のみの WritableRaster WritableRaster colorRaster = destRaster. createWritableChild(0, 0, width, height, 0, 0, colorBandList); colorRaster.setRect(image.getData()); // 4 : 2の WritableRaster のアルファ成分を設定 WritableRaster alphaRaster = destRaster. createWritableChild(0, 0, width, height, 0, 0, new int[]{destRaster.getNumBands() - 1}); // 可視領域を表すアルファ成分のみの Raster WritableRaster visibleMaskRaster = createVisibleAlphaRaster(image); alphaRaster.setRect(visibleMaskRaster); // 5 : BufferedImage の生成 return new BufferedImage(destColorModel, destRaster, false, null); }
番号の振ってあるコメントは、「アルファチャンネルを追加した BufferedImage を作成する - 処理手順」の各手順を表しています。
具体的には、次のようにして処理の整理を行いました。
- 1 : アルファチャンネル付きのカラーモデルの生成
- アルファチャンネルのあるカラーモデルを生成しているところで処理を区切りました。
- 2 : 1のカラーモデルを扱える WritableRaster の生成
- 1の直後にある、WritableRaster を生成している処理で区切りました。
- 3 : 2の WritableRaster の色成分を設定
- アルファ成分を表す WritableRaster にデータを設定している部分の直前で一旦区切りました(具体的には、
alphaRaster.setRect(visibleMaskRaster);
の直前)。しかし、この部分には、アルファ成分に関係する処理も含まれています。そこで、アルファ成分に関係する処理を4に移しました(具体的には、WritableRaster alphaRaster = destRaster. createWritableChild(0, 0, width, height, 0, 0, new int[]{destRaster.getNumBands() - 1});
// 可視領域を表すアルファ成分のみの Raster WritableRaster visibleMaskRaster = createVisibleAlphaRaster(image);
の処理です) - 4 : 2の WritableRaster のアルファ成分を設定
- 3で移された処理を含めて、アルファ成分のデータを設定しているところで区切りました。
- 5 : BufferedImage の生成
- 最後に BufferedImage を生成しているので、この部分を5としました。
これで順序ごとに処理が分けられたので、ある程度は見やすくなりました。しかし、全体が長いためか、あまり分かりやすいようには思えません。
そこで、順序ごとに分けた部分を、メソッドとして抽出していきたいと思います。
(つづきます)
PR
●この記事にコメントする
忍者ブログ [PR]