指定された任意の色を透明して描画します。
透明色が設定された GIF や PNG の画像を使用して下さい。

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

プログラムの作成

  1. メモ帳などでタイプして Blend.java の名前で保存して下さい。
    // 指定された色を透明にする    前田 稔
    import java.awt.*;
    import javax.swing.*;
    import java.awt.image.*;
    import java.io.File;
    import javax.imageio.ImageIO;
    
    public class ColorKey extends JFrame
    {
        BufferedImage img = null;
        String  Name = "kishimz.gif";
        //String  Name = "C:\\DATA\\Test\\kishimz.bmp";
    
        // Main
        public static void main(String args[])
        {   new ColorKey();  }
    
        // Constructor
        public ColorKey()
        {   super("透明色");
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setSize(200, 200);
    
            try
            {   img = ImageIO.read(new File(Name));  }
            catch (Exception e)
            {   e.printStackTrace();
                img = null;
            }
    
            Transparent(img, new Color(1.0f,0.0f,1.0f));
            setVisible(true);
        }
    
        public void paint(Graphics g)
        {   super.paint(g);
            if (img!=null)
            {   g.drawImage(img,20,40,this);  }
        }
    
        // 透明にする
        public static void Transparent(BufferedImage img, Color c)
        {
            int w = img.getWidth();     // Image の幅
            int h = img.getHeight();    // Image の高さ
            int t = c.getRGB();         // 透明色に変換する色のRGB値
    
            //RGB値を0(透明色)に置換
            for(int y = 0; y < h; y++)
            {   for(int x = 0; x < w; x++)
                {   if (img.getRGB(x,y)==t) img.setRGB(x,y,0);  }
            }
        }
    }
    
  2. 透明色が設定された GIF や PNG の画像を使用して下さい。
    指定された色 Color(1.0f,0.0f,1.0f)(プログラムではマゼンタ)を透明にして描画します。

プログラムの説明

  1. BufferedImage に入力した画像の任意の色を透明して描画します。
    kishimz.gif は XNA(C#) game program で使っている GIF の画像です。
    XNA ではマゼンタが自動的に透明色に設定されるので、背景色に使っています。
    そのままでは透明色が設定されていないので、黒を透明色に設定しました。
    透明色が設定された GIF や PNG の画像では、指定された色が透明になります。
    kishimz.bmp は BMP24 の画像で、指定された色が透明にならずに黒色になります。
    詳細は Image(画像)の描画 を参照して下さい。
        BufferedImage img = null;
        String  Name = "kishimz.gif";
        //String  Name = "C:\\DATA\\Test\\kishimz.bmp";
        
  2. Constructor で画像を入力して、Transparent() メソッドで透明にします。
    この行をコメントアウトすると、元の状態で描画されます。
    Color(1.0f,0.0f,1.0f) が透明にする色(サンプルプログラムではマゼンタ)です。
        // Constructor
        public ColorKey()
        {   super("透明色");
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setSize(200, 200);
    
            try
            {   img = ImageIO.read(new File(Name));  }
            catch (Exception e)
            {   e.printStackTrace();
                img = null;
            }
    
            Transparent(img, new Color(1.0f,0.0f,1.0f));
            setVisible(true);
        }
        
  3. paint() メソッドでは View に格納されている画像を描画します。
        // Paint Method
        public void paint(Graphics g)
        {   if (View!=null)
            {   g.drawImage(View,20,40,this);  }
        }
        
  4. 特定の色を透明にする Transparent() メソッドです。
    全ピクセルを調べて Color c と同じ色を setRGB(x,y,0); でゼロに置き換えます。
        // 透明にする
        public static void Transparent(BufferedImage img, Color c)
        {
            int w = img.getWidth();     // Image の幅
            int h = img.getHeight();    // Image の高さ
            int t = c.getRGB();         // 透明色に変換する色のRGB値
    
            //RGB値を0(透明色)に置換
            for(int y = 0; y < h; y++)
            {   for(int x = 0; x < w; x++)
                {   if (img.getRGB(x,y)==t) img.setRGB(x,y,0);  }
            }
        }
        

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