グラフィックス透過表示


  1. 透過表示
    RGB以外にα値を指定し、透過の度合いを指定して表示する。αが1でない場合、背景の色が残るため、擬似的に透過の表現ができる。
    1. アプレット
      Graphics2Dクラスを利用します。Jbuilderではアプレット形式で表示可能ですが、標準のIEのVMでは透過は表示できません。Java2のVMの組み込みが必要です。
    2. 透過モード
      1. モード
        複数のモードが用意されている。
      2. SRC_OVER
        通常の透過モードで、背景のないところではα値を乗算した強さで表示される。srcを表示する色、asをsrc側のα値とすると、
        src*as
        α=1の場合は、通常の表示と同じになり0では表示されない。
        背景がある場合、backを背景の色、abを背景のα値とすると、次の色で表示する。
          src*as+back*(1-as)*ab

        1. 背景色: ab=1、赤
          描画色: as=0.6、青


        2. 背景色: ab=1、赤
          描画色: as=0.2、青

      3. SRC_IN
        背景画像がある場合はSRC_OVERと同じ、背景がない場合は表示しない。背景画像の内部のみに表示する場合に便利です。
      4. その他
        他にも、背景や表示の色情報を無視するなどのモードがあるが、必要性は少ないと思われる。
  2. 手法
    1. Graphics2D
      Graphics2D クラスを利用する。
       Graphics2D g2 = (Graphics2D)g;
    2. AlphaCompositeクラス
      AlphaCompositeクラスを利用する。透過ルール(ルール番号)とalpha値(少数:0.0..1.0)を指定して、AlphaCompositeクラスのインスタンスを取得する。
       setComposite()でGraphics2D に設定する。
      AlphaComposite composite= AlphaComposite.getInstance(rule, alpha);
       g2.setComposite(composite);
    3. 色を指定して描画する。
      g2.setPaint(Color.blue);
      g2.fill(shape2);
    4. オフライン描画
      まず、imageを作成し、まとめて表示する。
      onPaint()でARGB型のBufferedImageクラスのimage を取得する。
      Graphics2D g2 = (Graphics2D)g;
        BufferedImage image = newBufferedImage(getWidth(),
      getHeight(), BufferedImage.TYPE_INT_ARGB);
      imageから、Graphics2D クラスのgimageを取得する。
      Graphics2D gImage = image.createGraphics();
      gimageに描画する。
      gImage.setPaint(Color.blue);
      gImage.fill(shape2);
      imageをg2に表示する。
        g2.drawImage(image, null, 0, 0);
  3. プロジェクト
    1. プロジェクト
      AWTアプレットを利用する。ただし、IEでの表示はできない。Graphics2Dの対応ができないと思われる。
    2. 利用法
      赤の楕円の背景に青の矩形を透過モードで表示する。modeを選択し、スライダでα値を指定する。
    3. レイアウト
      モードの選択メニュとα値を指定するスライダ、α値を数字表示するラベルを用意する。



    4. クラス:Applet1
      1. jbInit()
        choice1にモード名を追加する。指定順がルール番号になる。ルール番号2番(no_def)は定義されていない。3番のSRC_OVERを初期値にする。
          choice1.addItem("CLEAR");
         choice1.addItem("SRC");
        choice1.addItem("no_def");
        choice1.addItem("SRC_OVER");
        choice1.addItem("DST_OVER");
        choice1.addItem("SRC_IN");
        choice1.addItem("SRC_OUT");
        choice1.addItem("DST_IN");
        choice1.addItem("DST_OUT");
        choice1.select(3);
      2. start()
        初期値を設定し、描画する。
        shape1 = new Ellipse2D.Double(50, 100, 150, 100);
        shape2 = new Rectangle2D.Double(100, 150, 150, 100);
        rule = 3;
        repaint();
      3. paint(Graphics g)
        バッファを利用して、表示する。

        public void paint(Graphics g)
        {
        Graphics2D g2 = (Graphics2D)g;
        BufferedImage image = new BufferedImage(getWidth(),
        getHeight(), BufferedImage.TYPE_INT_ARGB);
        Graphics2D gImage = image.createGraphics();

        gImage.setPaint(Color.red);
        gImage.fill(shape1);
        AlphaComposite composite
        = AlphaComposite.getInstance(rule, alpha);
        gImage.setComposite(composite);
        gImage.setPaint(Color.blue);
        gImage.fill(shape2);
        g2.drawImage(image, null, 0, 0);
        }
      4. scrollbar1_adjustmentValueChanged
        スクロールバーの変化のイベント処理を行う。α値を0.0から1.0までの少数にして、再描画する。スクロールの変化範囲を0..100にすると、「つまみ」の幅だけ最大値が減少する。
      5. choice1_itemStateChanged
        選択メニューの変化のイベント処理を行う。ルール番号をruleに設定する。メニューで2番を指定した場合、デフォルトの3番に変更する。
  4. 実行
    modeメニューでモードを切り替え、スライダで透過度を調整します。modeにより処理の変化に注意して下さい。この処理には、Java2のVMが必要です。

  5. ダウンロード
    このプロジェクトをダウンロードできます。次の行をクリックして、transApplt.exeファイルを適当なフォルダに保存します。
    ダウンロード開始

    このファイルは自己解凍型の圧縮ファイルです。このファイルを実行すると指定したフォルダに必要なファイルが生成されます。

トップに戻る