category: Java
DATE : 2006/09/12 (Tue)
DATE : 2006/09/12 (Tue)
(前回の記事)
メソッドの抽出 (1)
前回の記事では、処理手順の通りに処理を並び替えました。
そこで、並び替えた処理をメソッドに抽出します。
まずは、「1 : アルファチャンネル付きのカラーモデルの生成」の部分
// 対象画像のカラースペース ColorSpace sourceColorSpace = image.getColorModel().getColorSpace(); // アルファチャンネルのあるカラーモデル ColorModel destColorModel = new ComponentColorModel( sourceColorSpace, true, false, Transparency.BITMASK, DataBuffer.TYPE_BYTE);
を、createColorModelWithAlpha メソッドとして抽出します。
/** * アルファチャンネルを追加したカラーモデルを生成します。 * * @param src アルファチャンネルを追加する元となるカラーモデル * @return アルファチャンネルを追加したカラーモデル * @throws NullPointerException src が null の場合 */ private static ColorModel createColorModelWithAlpha(ColorModel src) { return new ComponentColorModel(src.getColorSpace(), true, src.isAlphaPremultiplied(), Transparency.BITMASK, src.getTransferType()); }
抽出前のコードには、ColorSpace を格納するローカル変数がありましたが、オブジェクトに問い合わせる形(src.getColorSpace())に変更しました。
また、アルファが直前に乗算されているかどうかやデータの転送型は、引数のカラーモデルに従うように修正しました。
この部分は、メソッドに分けて初めて気が付いた部分です。メソッドに分けると、こういった細かい部分に気が向くので便利ですね( ´∀`)b
すると、「1 : アルファチャンネル付きのカラーモデルの生成」の部分は次のようになります。
ColorModel destColorModel = createColorModelWithAlpha(image.getColorModel());
とてもシンプルになりました。
ちなみに、「2 : 1のカラーモデルを扱える WritableRaster の生成」の部分は、「1のカラーモデルを扱える WritableRaster の生成」という意味がコードそのものに表れているので、メソッドには抽出しません。
WritableRaster destRaster = destColorModel. createCompatibleWritableRaster(width, height);
ただし、width, height という変数の中身はコードの上の方に定義されているので読みづらく感じます。そこで、これもオブジェクトに問い合わせる形に変更します。
WritableRaster destRaster = destColorModel. createCompatibleWritableRaster( image.getWidth(), image.getHeight());
(つづきます)
PR
●この記事にコメントする
忍者ブログ [PR]