# Bereich im Image löschen



## GastDanke (18. Apr 2008)

Hallo zusammen,

ich habe ein BufferedImage, das ist transparent.

Mit getGraphics().draw(Shape s) zeichne in das Bild, jetzt möchte ich aber, das er nicht zeichnet, sondern exakt diesen Bereich wieder transparent macht.

Also exakt die Pixel die das Shape bemalen "würde" soll er jetzt löschen, bzw. transparent machen!

Hat jemand eine Lösung?

Vielen Dank schonmal


----------



## Illuvatar (18. Apr 2008)

```
Graphics2D g = (Graphics2D)myImage.getGraphics();
g.setComposite (AlphaComposite.getInstance(AlphaComposite.DST, 0));
g.fill (myShape);
```

Ungetestet, sollte aber funktionieren


----------



## thematt (18. Apr 2008)

Funktioniert leider nicht :-(

Liegt es daran das meine Farbe leicht transparent ist?


----------



## Illuvatar (18. Apr 2008)

Ups, DST war falsch, hätte natürlich SRC sein müssen. Beispielprogramm:


```
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;
import javax.swing.*;
import static java.awt.Color.RED;

public class TestTransparency
{
  public static void main(String[] args)
  throws IOException
  {
    BufferedImage img = getTransparencyEnabledImage ("earth.jpg");
    Graphics2D g = (Graphics2D)img.getGraphics();
    g.setComposite (AlphaComposite.getInstance(AlphaComposite.SRC, 0));
    g.fill (new Rectangle(50, 50, 50, 50));
    g.dispose();
    
    JFrame f = new JFrame("Test");
    f.getContentPane().setBackground(RED);
    f.add (new JLabel(new ImageIcon(img)));
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.pack();
    f.setLocationRelativeTo(null);
    f.setVisible(true);
  }
  private static BufferedImage getTransparencyEnabledImage(String filename)
  throws IOException
  {
    BufferedImage img = ImageIO.read (new File(filename)); // enthält nicht unbedingt einen alpha-kanal
    BufferedImage ret = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_ARGB);
    ret.getGraphics().drawImage(img, 0, 0, null);
    return ret;
  }
}
```
(earth.jpg ist einfach irgendein Bild das ich zum Testen verwendet hab)

Falls du an der entsprechenden Stelle eine Halbtransparenz willst, musst du dir mal das AlphaComposite noch genauer anschauen. Diese Methode hier löscht alles, was vorher an der Stelle war, wo du zeichnen willst, und ersetzt das durch ein 100%-transparentes Rechteck.


----------



## thematt (18. Apr 2008)

Suoer!

Vielen Dank, du hast mir sehr weiter geholfen!


----------

