2012-07-18 12 views
8

In un progetto, desidero ridimensionare e modificare contemporaneamente l'opacità di un'immagine. Finora penso di aver ridimensionato. Io uso un metodo definito in questo modo per realizzare il ridimensionamento:Modifica dell'immagine Opacity

public BufferedImage resizeImage(BufferedImage originalImage, int type){ 

    initialWidth += 10; 
    initialHeight += 10; 
    BufferedImage resizedImage = new BufferedImage(initialWidth, initialHeight, type); 
    Graphics2D g = resizedImage.createGraphics(); 
    g.drawImage(originalImage, 0, 0, initialWidth, initialHeight, null); 
    g.dispose(); 

    return resizedImage; 
} 

ho ottenuto questo codice da qui. Quello a cui non riesco a trovare una soluzione sta cambiando l'opacità. Questo è quello che mi chiedo come fare (se è possibile a tutti). Grazie in anticipo.

UPDATE:

ho provato questo codice per visualizzare un'immagine di un cerchio con interni trasparenti e esterni (vedi sotto immagine) crescente e sempre meno opaca, ma non ha funzionato. Non sono sicuro di cosa c'è che non va. Tutto il codice è in una classe chiamata Animazione

public Animation() throws IOException{ 

    image = ImageIO.read(new File("circleAnimation.png")); 
    initialWidth = 50; 
    initialHeight = 50; 
    opacity = 1; 
} 

public BufferedImage animateCircle(BufferedImage originalImage, int type){ 

     //The opacity exponentially decreases 
     opacity *= 0.8; 
     initialWidth += 10; 
     initialHeight += 10; 

     BufferedImage resizedImage = new BufferedImage(initialWidth, initialHeight, type); 
     Graphics2D g = resizedImage.createGraphics(); 
     g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, opacity)); 
     g.drawImage(originalImage, 0, 0, initialWidth, initialHeight, null); 
     g.dispose(); 

     return resizedImage; 

} 

mi chiamano così:

Animation animate = new Animation(); 
int type = animate.image.getType() == 0? BufferedImage.TYPE_INT_ARGB : animate.image.getType(); 
BufferedImage newImage; 
while(animate.opacity > 0){ 

    newImage = animate.animateCircle(animate.image, type); 
    g.drawImage(newImage, 400, 350, this); 

} 
+0

Per un aiuto migliore, pubblicare un [SSCCE] (http://sscce.org/). –

risposta

19

prima assicurarsi che il tipo si sta passando in al metodo contiene un canale alfa, come

BufferedImage.TYPE_INT_ARGB 

e poi appena prima di dipingere la nuova immagine, chiamare il metodo setComposite Graphics2D in questo modo:

float opacity = 0.5f; 
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, opacity)); 

che imposterà l'opacità del disegno al 50%.

+0

Ci proverò e ti risponderò se funziona. – pasawaya

+0

Inoltre, basta controllare, 1 corrisponde a completamente visibile e 0 a trasparente? Grazie. E inoltre, chiamo 'setComposite()' prima o dopo che disegno? – pasawaya

+1

0 è trasparente, 1 è opaco – MadProgrammer

Problemi correlati