Question

J'ai créé un ARVB BufferedImage. Maintenant, je voudrais avec un ré-initialiser fond transparent. J'ai essayé le code suivant:

(...) 
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);
(...)

mais ça n'a pas marché.

Toute idée sur la façon de le faire s'il vous plaît?

Merci!

Était-ce utile?

La solution

g.clearRect(..) remplit le rectangle sélectionné avec la couleur de fond de l'objet Graphics2D. Vous êtes mieux de faire g.fillRect(..) qui donnerait le résultat escompté avec votre code, ou définir la couleur d'arrière-plan de l'objet Graphics2D préalable (de g.setBackground(..)).

En outre, vous devrez peut-être faire g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC)); avant le remplissage afin qu'il fixe le tampon correctement (ignorer les données de mémoire tampon de destination, utilisez uniquement des données source - dans ce cas, l'opération de remplissage). Je ne sais pas ce que la valeur par défaut est pour cette valeur, mais vous devez le remettre à plus tard que pour assurer le bon fonctionnement.

Autres conseils

J'ai eu ce problème avant et je l'ai résolu avec un truc vraiment étroite. Voici l'affaire:

Dans le constructeur de la peinture de classe prendre une capture d'écran du système mais attention

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

Et où vous voulez effacer l'écran

g2D.drawImage(image, null, /*your Image observer*/);                    
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top