4

Javaでグレースケール色のPNG画像(アルファチャンネル付き)を描画し、その上に透明な色、たとえば不透明度75%の緑を重ねて色を変更する方法を探しています。 明確にするために、結果として得られる画像は、その上に透明な色を配置した直接の結果であり、特別なタイプのブレンドの結果ではありません。

たとえば、次の画像を描画します。

次に、画像の上に RGB カラー (102、255、0、アルファ) を重ねます。

画像の上に色を描画する方法は、近接している画面上の他の画像と干渉しないようにする必要があります。これは、Adobe Photoshop のカラー オーバーレイ機能と同様に動作します。2 つの画像に別々のカラー オーバーレイを使用できますが、別々のオーバーレイが互いに競合することはありません。

leonbloy のおかげで、「SRC_OVER」を使用する AlphaComposit がこれを解決できると信じています。その後、オーバーレイが画面上の他の画像オブジェクトに影響を与えるのを防ぐ新しい BufferedImage として結果を保存するメソッドを使用できます。

これをテストしながら結果を投稿します。

4

1 に答える 1

6

AlphaComposite、Graphics2D、および BufferedImage を使用して、目的の効果を得ることができました。

@Override
public void paintComponent(Graphics g) {
    BufferedImage result = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
    Graphics2D gbi = result.createGraphics();
    BufferedImage x = null;
    try {
        x = ImageIO.read(getClass().getResource("/resources/someimage.png"));
    } catch (IOException ex) {
        Logger.getLogger(CanvasPanel.class.getName()).log(Level.SEVERE, null, ex);
    }
    gbi.drawImage(x, 0, 0, this);
    gbi.setColor(selectedColor);
    gbi.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.75f));
    gbi.fillRect(0, 0, width, height);
    g.drawImage(result, 0, 0, this);
}
于 2012-11-17T17:22:16.440 に答える