目次 | 前の項目 | 次の項目 Java 2D API


2.8 イメージの合成

Graphics2D コンテキストには、オブジェクトが重なる場合に使われる合成の規則をカプセル化する Composite オブジェクトが含まれています。AlphaComposite は、混合と透過の効果をサポートする、合成のための共通規則を数多く実装しています。もっとも一般的に使われる規則は SRC_OVER です。


2.8.1 合成規則 SRC_OVER の使用方法

SRC_OVER の合成規則は、デスティネーションピクセルの上にソースピクセルを重ね合わせるもので、共有されるピクセルはソースピクセルの色になります。たとえば、青い矩形をレンダリングしてから、それと一部が重なる赤い矩形をレンダリングした場合、重なり合う部分の色は赤になります。つまり、最後にレンダリングされたオブジェクトが、いちばん上に表示されます。

次は、合成規則 SRC_OVER の使用方法です。

  1. 規則に SRC_OVER を指定して getInstance メソッドを呼び出し、AlphaComposite オブジェクトを作成する
AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER);
  1. setComposite メソッドを呼び出し、Graphics2D コンテキストに AlphaComposite オブジェクトを追加する
g2.setComposite(ac);
合成オブジェクトがいったん設定されると、重なりを持つオブジェクトは指定されている合成規則に従ってレンダリングされます。


2.8.2 重なるオブジェクトの透明度の変更

AlphaComposite を使うと、アルファ値の定数を追加して指定できます。この値は、ソースピクセルのアルファ値に掛けられて、ソースピクセルの透明度が高くなります。

たとえば、50% の透過率でソースオブジェクトをレンダリングする AlphaComposite オブジェクトを作るには、アルファに .5 を指定します。

AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, .5f);
次の例では、ソースを上に重ねるアルファ合成オブジェクトをアルファ値 .5 で作成し、グラフィックスコンテキストに追加しています。その結果、それ以降の図形は 50% の透明度でレンダリングされます。

public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.red);
g2.translate(100,50);
// radians=degree * pie / 180
g2.rotate((45*java.lang.Math.PI)/180);
g2.fillRect(0,0,100,100);
g2.setTransform(new AffineTransform()); // set to identity
// Create a new alpha composite
AlphaComposite ac =
AlphaComposite.getInstance(AlphaComposite.SRC_OVER,0.5f);
g2.setComposite(ac);
g2.setColor(Color.green);
g2.fillRect(50,0,100,100);
g2.setColor(Color.blue);
g2.fillRect(125,75,100,100);
g2.setColor(Color.yellow);
g2.fillRect(50,125,100,100);
g2.setColor(Color.pink);
g2.fillRect(-25,75,100,100);
}


目次 | 前の項目 | 次の項目
Copyright © 1997-1998 Sun Microsystems, Inc. All Rights Reserved.