2010-12-30 16 views
2

Ich habe eine ARGB BufferedImage erstellt. Jetzt möchte ich es mit einem transparenten Hintergrund reinitialisieren. Ich habe versucht, den folgenden Code:Füllen mit Transparenz mit Graphics2D

(...) 
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 man das bitte macht?

Danke!

+0

Didn‘löschen möchten t wie? Warst du eine Ausnahme? ein blaues Bild erstellt? ein Nullbild erstellt? – Will

+0

mein Bildschirm ist schwarz auf weißem Hintergrund. – Pierre

Antwort

2

g.clearRect(..) füllt das ausgewählte Rechteck mit der Hintergrundfarbe des Objekts Graphics2D. Sie tun besser g.fillRect(..), die das beabsichtigte Ergebnis mit Ihrem Code geben würde, oder legen Sie die Hintergrundfarbe des Graphics2D Objekts zuvor fest (g.setBackground(..)).

Möglicherweise müssen Sie auch g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC)); vor der Füllung tun, damit es den Puffer richtig setzt (Zielpufferdaten ignorieren, nur Quelldaten verwenden - in diesem Fall die Fülloperation). Sie sind sich nicht sicher, was der Standardwert für diesen Wert ist, aber Sie sollten ihn danach auf diesen zurücksetzen, um einen ordnungsgemäßen Betrieb sicherzustellen.

+0

danke! setBackground war die Lösung. – Pierre

-1

Ich hatte dieses Problem vor und ich löste es mit einem wirklich engen Trick. Hier ist der Deal:

Im Konstruktor der Farbe Klasse einen Screenshot des Systems nehmen aber Vorsicht

BufferedImage image = new Robot().createScreenCapture(new Rectangle(0, 23, xScreen, yScreen)); 

Und wo Sie den Bildschirm

g2D.drawImage(image, null, /*your Image observer*/);