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 !

War es hilfreich?

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*/);                    
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top