Wie transparent zeichnen?

chirimoya

Grünschnabel
Hallo,
ich hätte mal eine Frage, und zwar habe ich ein JPanel, welches ich durch setOpaque(false) transparent gemacht habe.
Nun möchte ich auf diesem Panel zeichnen wie in einem Zeichenprogramm (z.B. Paint). Das klappt auch alles soweit, nur möchte ich auch gerne die Möglichkeit geben, Sachen wieder per Mouse "wegzuradieren". Normalerweise würde man einfach mit der Hintergrundfarbe drüberzeichnen, aber in diesem Fall ist das Panel ja transparent (soll auch transparent bleiben) Wie könnte man das denn realisieren? Ist das möglich?

Wäre sehr nett, wenn da jemand einen Tipp für mich hätte... :)
 
Hallo,

ich weiß nicht, ob das funktioniert, aber probier mal den Alpha-Wert auf Null zu setzen, also new Color(0x000000,true); und mit der drüber zu malen. Dann müsste es eigentlich transparent werden.
 
Das hab ich schon versucht und es zeichnet dann auch transparent. Das Problem ist nur, dass es die farbigen Pixel dabei nicht "überschreibt". :confused:
 
Naja Transparent über was bestehndes Malen bringt ja faktisch nichts. Leider überschreibt das Malen nicht das bisherige.

Probier mal setPaintMode()

oder g.setColor(this.getBackground( ));
 
Funktioniert leider auch nicht.
Bei setPaintMode() passiert überhaupt nichts und bei g.setColor(this.getBackground( )); wird dann in weiß gezeichnet (das JPanel habe ich mit setOpaque transparent gemacht).

Hmm, gibt es keine Möglichkeit, dass irgendwie umzusetzten?
 
Bei setPaintMode passiert natürlich nichts sichtbares, es wird nur der Modus umgestellt. Danach musst du mit der transparenten Farbe drüber malen, die wird dann nicht mit der vorherigen vermischt sondern überschreibt die.
Ansonsten gäbe es vielleicht die Möglichkeit, die ganze Fläche als BufferedImage zu speichern und bei der Eingabe (aus dem MouseListener) da die entsprechenden Pixel zu setzen und zu löschen und das Bild in die Fläche zu zeichnen. Aber dann muss auch setPaintMode gesetzt sein, damit das vorherige Bild überschrieben wird.
 
Ich glaube, ich habe es jetzt hinbekommen:

g2d.drawLine(0, 0, 200, 200); //zeichne Linie
g2d.setColor(new Color(0x000000,true));
g2d.setComposite(AlphaComposite.Src);
g2d.drawLine(0, 0, 200, 200); //Linie wird wieder transparent

Vielen Dank für eure Hilfe!
 
Hallo zusammen,

passt zum Thema - auch wenn das ganze schon etwas älter ist hier. ;)

Also: Ich habe das selbe Problem: Ich möchte transparent zeichnen. Allerdings nicht auf einen einfarbigen Hintergrund, sondern auf ein Bild!

Also ich möchte ein einfaches graues Rechteck (50% Deckkraft) auf die bestehende Oberfläche zeichnen (Schachfeld aus mehreren Bildern).

Geht sowas?
Oder geht das über die Grenzen von Java hinaus? ;)

EDIT:
Schon gelöst...
Java:
Graphics2D g2d = (Graphics2D)g;
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.75f));
Der einzige Unterschied war, dass man AlphaComposite.SRC_OVER statt AlphaComposite.SRC nutzen musste.
Hätte ich auch schneller drauf kommen können ;)

lg
 
Zuletzt bearbeitet:
Zurück