Riempire con la trasparenza usando Graphics2D
-
14-10-2019 - |
Domanda
ho creato un ARGB BufferedImage. Ora mi piacerebbe reinizializzare con uno sfondo trasparente. Ho provato il seguente codice:
(...)
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);
(...)
, ma non ha funzionato.
Qualche idea su come fare questo favore?
Grazie!
Soluzione
g.clearRect(..)
riempie il rettangolo selezionato con il colore dell'oggetto Graphics2D
sfondo. È meglio fare g.fillRect(..)
che darebbe il risultato desiderato con il codice, o impostare il colore dell'oggetto Graphics2D
anticipo (g.setBackground(..)
).
Inoltre, si può avere a che fare g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC));
prima del riempimento in modo che esso imposta il buffer correttamente (ignorare i dati buffer di destinazione, utilizzare solo dati di origine - in questo caso, l'operazione di riempimento). Non sono sicuro che il valore predefinito è per questo valore, ma si dovrebbe impostare di nuovo a che poi a garantire un corretto funzionamento.
Altri suggerimenti
Ho avuto questo problema prima e ho risolto con un trucco davvero stretta. Qui è l'affare:
Nel costruttore della vernice Classe prendere uno screenshot del sistema ma attenzione
BufferedImage image = new Robot().createScreenCapture(new Rectangle(0, 23, xScreen, yScreen));
E in cui si desidera cancellare lo schermo
g2D.drawImage(image, null, /*your Image observer*/);