89

Java で 2 つの画像 (BufferedImage) をマージする必要があります。透け感がなくても問題ありません。ベース イメージにはすでにある程度の透明度があります。これをそのままにして、「マスク」を適用したい、2番目の画像。この 2 番目の画像には不透明なピクセルはありません。実際、ほぼ完全に透明で、透明度の低いピクセルがいくつかあるだけで、反射のような「光の効果」が得られます。重要な詳細: 画面上でこれを行いたくありません。グラフィックスでは、結果のマージで BufferedImage を取得する必要があります。

誰でも私を助けることができますか?ありがとう!

詳細: 透明度を維持しながら 2 つの画像を結合します。これが私がしなければならないことです。

注: このSet BufferedImage alpha mask in Javaは、透明度を持つ 2 つの画像をうまく処理できないため、必要なことを行いません。最初の画像の透明度を変更します。

4

4 に答える 4

195

透明度のある新しい BufferedImage を作成し、その上に他の 2 つの画像 (完全または半透明度) をペイントするだけです。これは次のようになります。

画像とオーバーレイ

サンプルコード (画像は「image.png」および「overlay.png」と呼ばれます):

File path = ... // base path of the images

// load source images
BufferedImage image = ImageIO.read(new File(path, "image.png"));
BufferedImage overlay = ImageIO.read(new File(path, "overlay.png"));

// create the new image, canvas size is the max. of both image sizes
int w = Math.max(image.getWidth(), overlay.getWidth());
int h = Math.max(image.getHeight(), overlay.getHeight());
BufferedImage combined = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);

// paint both images, preserving the alpha channels
Graphics g = combined.getGraphics();
g.drawImage(image, 0, 0, null);
g.drawImage(overlay, 0, 0, null);

g.dispose();

// Save as new image
ImageIO.write(combined, "PNG", new File(path, "combined.png"));
于 2010-02-23T15:21:48.433 に答える
4

具体的な回答はできませんが、java.awt.AlphaComposite はあなたの味方です。2 つの画像をどのように結合するかを完全に制御できます。ただし、使い方は簡単ではありません。最初にグラフィック理論を少し学ぶ必要があります。

于 2010-02-23T12:43:49.243 に答える
4

あなたが達成しようとしている効果について詳しく知ることなく、BufferedImage に直接描画することもできることを指摘します。したがって、画面上でできることはすべて、画像自体で行うことができます。

したがって、一方を他方の上に描画するだけであれば、それは非常に簡単です。基本画像の Graphics オブジェクトを取得し、その上に別のオブジェクトを描画するだけです。

繰り返しますが、目的とする正確な効果によっては、うまくいかない場合があります。より詳細にすると、より適切なヘルプが可能になります。たとえば、他のレスポンダーが言及しているように、これは AlphaComposite の仕事ですか、それともカスタム ImageOp (または既存の ImageOps の組み合わせ) ですか。

于 2010-02-23T12:54:54.527 に答える