Füllen mit Transparenz unter Verwendung von Graphics2D
-
14-10-2019 - |
Frage
Ich habe ein Argb BufferedImage erstellt. Jetzt möchte ich es mit einem transparenten Hintergrund neu initialisieren. Ich habe den folgenden Code ausprobiert:
(...)
if( this.offscreen==null ||
this.offscreen.getWidth()!= dim.width ||
this.offscreen.getHeight()!= dim.height )
{
this.offscreen=new BufferedImage(
dim.width,
dim.height,
BufferedImage.TYPE_INT_ARGB);
}
Graphics2D g=this.offscreen.createGraphics();
g.setColor(new Color(255,255,255,0));
g.clearRect(0, 0, dim.width, dim.height);
(...)
Aber es hat nicht funktioniert.
Irgendeine Idee, wie das bitte?
Vielen Dank !
Lösung
g.clearRect(..)
Füllt das ausgewählte Rechteck mit der Hintergrundfarbe des Graphics2D
Objekt. Du bist besser dran, es g.fillRect(..)
Dies würde das beabsichtigte Ergebnis mit Ihrem Code geben oder die Hintergrundfarbe des Graphics2D
Objekt vorher (g.setBackground(..)
).
Möglicherweise müssen Sie auch tun g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC));
Vor der Füllung so, dass der Puffer ordnungsgemäß festgelegt wird (ignorieren Sie Zielpufferdaten, verwenden Sie nur Quelldaten - in diesem Fall den Füllbetrieb). Ich bin mir nicht sicher, wie der Standard für diesen Wert ist, aber Sie sollten ihn danach wieder darauf einstellen, um einen ordnungsgemäßen Betrieb zu gewährleisten.
Andere Tipps
Ich hatte dieses Problem schon einmal und löste es mit einem wirklich engen Trick. Hier ist der Deal:
Machen Sie im Konstruktor der Lackklasse einen Screenshot des Systems, aber seien Sie vorsichtig
BufferedImage image = new Robot().createScreenCapture(new Rectangle(0, 23, xScreen, yScreen));
Und wo Sie den Bildschirm löschen möchten
g2D.drawImage(image, null, /*your Image observer*/);