背景画像の上からアルファチャネルを設定した赤色のイメージ(矩形)を描画します。

Applet で作成したプログラムを実行します。
アルファチャネル設定イメージ

前田稔の超初心者のプログラム入門

プログラムの作成

  1. メモ帳などでタイプして Alpha.java の名前で保存して下さい。
    // アルファチャネル設定イメージのテスト    前田 稔
    import java.awt.*;
    import java.awt.image.*;
    import javax.swing.*;
    import java.io.File;
    import javax.imageio.ImageIO;
    
    public class Alpha extends JFrame
    {
        Image   img;
        BufferedImage back = null;
        String  Name = "C:\\DATA\\Test\\back.jpg";
    
        // Main
        public static void main(String args[])
        {   new Alpha();  }
    
        // Constructor
        public Alpha()
        {   super("アルファチャネル");
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setSize(300, 300);
    
            try
            {   back = ImageIO.read(new File(Name));  }
            catch (Exception e)
            {   e.printStackTrace();
                back = null;
            }
    
            int ary[] = new int[300 * 240], index = 0;
            for(int i = 0; i < 240; i++)
            {   for(int j = 0; j < 300; j++)
                    ary[index++] = (i<<24) | (255<<16);
            }
            ColorModel cm = ColorModel.getRGBdefault();
            // 横=300ピクセル、縦=240ピクセル
            MemoryImageSource m = new MemoryImageSource(300 , 240 , cm , ary , 0 , 300);
            img = createImage(m);
    
            setVisible(true);
        }
    
        public void paint(Graphics g)
        {   super.paint(g);
            if (back!=null)
            {   g.drawImage(back,0,0,this);  }
            g.drawImage(img, 0, 0, this);
        }
    }
    
  2. アルファチャネルを設定したイメージのサイズは、横=300ピクセル、縦=240ピクセルです。
    適当なサイズの背景画像("C:\\DATA\\Test\\back.jpg")を用意して下さい。
    グラデーションされた赤色のイメージを通して背景画像が透けて見えます。

プログラムの説明

  1. アルファチャネル付きの画像を作成するツールは少なく、仮に作成出来てもアルファチャネル付きでロードする方法が見つかりません。
    そこで MemoryImageSource を使ってプログラムでイメージ画像を生成しました。
    int ary[] がピクセルの並びで、横=300ピクセル、縦=240ピクセルの大きさで確保しています。
    ピクセルは、先頭から 24〜31= アルファ成分、16〜23= 赤色成分、8〜15= 緑色成分、0〜7= 青色成分で構成されます。
    アルファ成分には、グラデーションするために0〜239の値を設定します。
    アルファ成分のサイズは8ビットで「全て1(0Xff)で不透明に、全て0(0X00)で透明に」なります。
    RGB は全て赤(0XFF0000)に設定しています。
            int ary[] = new int[300 * 240], index = 0;
            for(int i = 0; i < 240; i++)
            {   for(int j = 0; j < 300; j++)
                    ary[index++] = (i<<24) | (255<<16);
            }
            ColorModel cm = ColorModel.getRGBdefault();
            // 横=300ピクセル、縦=240ピクセル
            MemoryImageSource m = new MemoryImageSource(300, 240, cm, ary, 0, 300);
            img = createImage(m);
        
  2. BufferedImage back は背景画像の領域です。
        BufferedImage back = null;
        String  Name = "C:\\DATA\\Test\\back.jpg";
            ・・・
    
            try
            {   back = ImageIO.read(new File(Name));  }
            catch (Exception e)
            {   e.printStackTrace();
                back = null;
            }
        
  3. paint() メソッドで背景画像の上からアルファチャネル付きの画像を描画します。
    グラデーションされた赤色のイメージを通して背景画像が透けて見えます。
        public void paint(Graphics g)
        {   super.paint(g);
            if (back!=null)
            {   g.drawImage(back,0,0,this);  }
            g.drawImage(img, 0, 0, this);
        }
        

【NOTE】

Java で画像ファイルを入出力する方法は幾つかあるのですが、ImageIO を使うのが一般的です。 (?_?;
画像の入力は ImageIO.read() を使います。
画像の出力は ImageIO.write() を使います。
ところが現在のバージョンではアルファチャネルに対応していないらしく、入力も出力も出来ません。 (^_^;)
入力では、アルファチャネルが無視されて読み込まれます。
出力では、アルファチャネルが無視されて書き込まれるか、またはファイル長がゼロになります。
アルファチャネル対応のBMP形式だけの問題なら簡単に対応出来るのでしょうが、バージョンアップされるのを待つしか無いようです。 (;_;)

超初心者のプログラム入門(Java2)