>>やんちさん
リンク先のコードを使ってみました
そうしたら、一回だけ透明色ができたのですが
ソースをいじってたら透明にならなくなりました
javaのキャッシュがきいているのか、ソースが間違っているのかわからなくなりました
そこで、リンク先のコードを少し変更したところ
たしかに透明にする色の摘出には成功しているのですが
透明色に変更するという関数Transparentのところで、うまいぐあいに透明になってないみたいです
setRGB(x,y,0); で透明になるようですが 0はインデックスカラーか?何か?いじってたら
インデックスカラーのような気がしてきました
画像が青に変更になっているので、黒(Color(0,0,0))をとりだしているようですが
透明にセットするのが失敗しているようです
もしくは上のようにキャッシュがきいているかもしれないです
どこかミスっていないかアドバイスをいただけないでしょうか?
下がソースコードです
コード:
// 指定された色を透明にする
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(300, 300);
try
{ img = ImageIO.read(new File(Name)); }
catch (Exception e)
{ e.printStackTrace();
img = null;
}
Transparent(img, new Color(0,0,0));
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);
img.setRGB(x,y,255);
}
}
}
}