2012-07-18 27 views
8

En un proyecto, quiero cambiar el tamaño y cambiar la opacidad de una imagen simultáneamente. Hasta ahora, creo que tengo el cambio de tamaño. Yo uso un método definido como para lograr el cambio de tamaño:Cambiar la opacidad de la imagen

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; 
} 

Recibí este código desde aquí. Lo que no puedo encontrar una solución es cambiar la opacidad. Eso es lo que me pregunto cómo hacer (si es posible). Gracias por adelantado.

ACTUALIZACIÓN:

Me trató este código para mostrar una imagen de un círculo con interiores y exteriores transparentes (ver imagen abajo) en crecimiento y cada vez menos opaca, pero que no funcionó. No estoy seguro de lo que está mal. Todo el código está en una clase llamada Animación

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; 

} 

me llaman así:

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

Para una mejor ayuda antes, publique un [SSCCE] (http://sscce.org/). –

Respuesta

19

primero asegúrese de que el tipo que está pasando en el método contiene un canal alfa, como

BufferedImage.TYPE_INT_ARGB 

y luego justo antes de pintar la nueva imagen, llame al método Graphics2D setComposite así:

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

que establecerá la opacidad del dibujo al 50%.

+0

Lo intentaré y te llamaré si funciona. – pasawaya

+0

Además, solo marcando, ¿1 corresponde a completamente visible y 0 a transparente? Gracias. Y también, ¿llamo 'setComposite()' antes o después de dibujar? – pasawaya

+1

0 es transparente, 1 es opaco – MadProgrammer

Cuestiones relacionadas