半透明のイメージ

 Javaで色を指定する時は、32ビット整数を使います。これは、RGBをそれぞれ8ビットで表して上位8ビットが「透明度」になっているのですが、Graphicsクラスに描画色を指定するColorオブジェクトでは透明度は常に255(不透明)になってしまうので、残念ながら半透明の描画色は指定できません(Color クラスのコンストラクタもnew Color(R,G,B)というものでしたね)。

 しかし、色の配列からイメージを作る方法ではColorオブジェクトを使わずに直接色を指定するため透明度の指定ができます。例えば、半透明の青なら0x800000ff となるわけです。ですから、全ての要素を0x800000ff にしたint型配列でイメージを作ってそれを描画すると下の絵が「透けて」見えます。

  for (i=0;i<64;i++)  // 半透明64*64で青のイメージを作る
      for (j=0;j<64;j++)
          dot[j+i*64]=0x800000ff;

  img=createImage(new MemoryImageSource(64,64,dot,0,64));

 ただし、半透明で描いたイメージをさらに別のイメージにGraphicsオブジェクトを使って描くと、透明度の情報が失われて不透明になるようですから注意してください。つまり、ダブルバッファに描くイメージには使えないわけですね。半透明のイメージを描く時は、アプレットのpaint()メソッドで描けば良いでしょう。先に背景のイメージを描いて、その上に半透明化したイメージを描くわけです。

  public void paint(Graphics g){ // paint メソッド

      g.drawImage(bk,8,8,this); // 背景イメージ描画
      g.drawImage(img,x+8,y+8,this); // 半透明イメージ描画

  }

プログラム

 今回のプログラムは、半透明の青いイメージを描いてみました。アプレットをクリックするとカーソルキーで移動できますので、実際に下の背景が「透けて」見える事を確かめてみましょう。

プログラムソース表示

戻る