- PR -

Java2D:非透過イメージの透明色の指定方法は?

1
投稿者投稿内容
しれん
会議室デビュー日: 2003/10/29
投稿数: 9
お住まい・勤務地: 東京都
投稿日時: 2005-03-31 13:48
こんにちは。しれんと申します。

現在JAVA2D APIを使用して、グラフィックライブラリを作成しているのですが
JPEGやPNGなどの非透過イメージを表示させる上で「透明色」の指定方法が分からず
苦戦しております。

現在のロジックとしては、javax.io.ImageIOクラスを使用し、以下のような形で
イメージをBufferedImageにロードして描画しております。

BufferedImage image = ImageIO.read( "[イメージファイルのパス]" );
g2d.drawImage( image, [X座標], [Y座標], [ImageObserver] );
// ※g2dインスタンスは描画先のGraphics2Dコンテキスト

透過PNGイメージや透過GIFイメージを使用した場合、透明色はそのまま反映される為に解決出来るのですが
非透過イメージを使用して表示した場合に、コードレベルで透明色を指定することは出来るのでしょうか?

どうかご教授の程よろしく御願い致します。
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2005-03-31 13:55
BufferedImage はアルファ成分を持てるので、普通に BufferedImage#setRGB() で透過させられませんか?
しれん
会議室デビュー日: 2003/10/29
投稿数: 9
お住まい・勤務地: 東京都
投稿日時: 2005-03-31 14:14
お返事ありがとう御座います。
要旨が伝わりづらくて申し訳ありません。

BufferedImageのアルファブレンディングについてはAlphaCompositeクラスを使用して
実現出来てはいるのですが、今回の要件では、指定色を「抜け色」にしたい(マスキングしたい)のです。
非透過イメージの「抜け色」指定以外に、マスキングで対応出来る方法があればよいのですが・・・。
どうかよろしく御願いします。
a-san
ベテラン
会議室デビュー日: 2004/06/01
投稿数: 53
投稿日時: 2005-04-03 00:04
私も以前同じことをしたかったのですが、そのときは、
新しい画像を作り、指定した色だけ透明に置き換えて作りました。
コード:
	BufferedImage org = ...
	int w = org.getWidth();
	int h = org.getHeight();
	BufferedImage dst = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
	for (int y=0; y<h; y++) {
		for (int x=0; x<w; x++) {
			if (org.getRGB(x, y) == 0xFFFF00FF) {//ピンク
				dst.setRGB(x, y, 0);//透明
			}
			else {
				dst.setRGB(x, y, org.getRGB(x, y));
			}
		}
	}

しれん
会議室デビュー日: 2003/10/29
投稿数: 9
お住まい・勤務地: 東京都
投稿日時: 2005-04-04 13:24
>a-san

ご回答ありがとう御座います。
Graphics2Dコンテキストなどに何か設定できるパラメータがもしや在るのでは、
と思っていたのですが、やはりPixcel単位の処理が必要なんですね。
参考になりました。ありがとう御座います。
1

スキルアップ/キャリアアップ(JOB@IT)