2009-08-03 7 views
3

私はJavaのグラフィックスシステムを使用しています。後でペイントするために、複数のイメージを1つのイメージに結合するアルファブレンディング

壁紙を最初に塗りつぶしたときに、内部の画像に画像ペイントを行い、その合成画像をターゲットグラフィックスコンテキストにコピーして取得しますスクリーン。コンポジットは、オブジェクトのサイズが変更された場合にのみ再作成されるため、コンポジットからターゲットグラフィックスコンテキストにクリッピングされた領域をコピーすることが、後で再描画するための唯一の作業です。

解決策は本当にうまくいきます。ただし、アルファチャンネルの透明度を持つPNG画像がある場合、アルファチャンネルはコンポジットのペイント時に失われます。つまり、コンポジットはすべてのピクセルが完全に不透明です。したがって、オンスクリーングラフィックスコンテキストへの後続のコピーは、壁紙付きオブジェクトの後ろに表示されているものを表示することができません。

私はRGBImageFilterを使って完全に透明なピクセルをフィルタリングすることができましたが、ブレンドされた透明性を実現するソリューションは見当たりません。

アルファチャンネルの画像をそのままペイントする方法を知っている人はいますか?

答えて

3

合成画像にはどのようなタイプの画像を使用しますか?

あなたは、BufferedImageを使用し、そのタイプを半透明を許容するTYPE_INT_ARGBに設定する必要があります。

+0

私はjava.awt.component.createImage()を使用しています。 BufferedImageを使用してどのように動くかを知ることができます。 –

+0

これは非常にありがとう、動作します。私はBufferedImageを見逃してしまった、私は知らない! –

+2

BufferedImageはJavaが私の意見で持っているもっとも有用なImageサブクラスです。あなたはできるだけそれを使うべきです。このイメージを頻繁に使用する場合は、BufferedImage()。setAcceleration()を0より大きいパラメータで呼び出すことで、ハードウェアアクセラレーションを有効にする必要があります。 –

関連する問題