2011-08-31 109 views
7

aquí es mi código"cambiar el tamaño de la imagen java getScaledInstance

ImageIcon ii=new ImageIcon("/Users/tushar_chutani/Desktop/apple.jpg"); 
      Image image= ii.getImage().getScaledInstance(50, 50, Image.SCALE_SMOOTH); 

la imagen no se está ampliando lo que está mal con el código?

+1

¿Qué errores está obteniendo? ¿Se puede mostrar el ImageIcon original? ¿Cómo sabes que no está escalando? Según las dos líneas de código que publicaste, no haces nada con la imagen. Publique su [SSCCE] (http://sscce.org) que demuestre el problema. – camickr

+0

la imagen no se muestra ... la imagen cambia a blanco ... –

+1

Entonces probablemente no haya leído la imagen. No ha publicado un SSCCE, por lo que no hay mucho más que podamos hacer por usted. – camickr

Respuesta

15

El problema es que Image.getScaledInstance() no devuelve una, imagen escalada terminado . se deja gran parte del trabajo de escala para una tarde momento en que se utilizan los píxeles de la imagen.

por ejemplo, si se utiliza la imagen escalada en una llamada Graphics2D.drawImage() entonces el método devolverá falso y continuará dibujando asincrónicamente. Luego debe usar el parámetro ImageObserver en la llamada Graphics2D.drawImage() para esperar a que finalice la escala y el dibujo.

El siguiente ejemplo muestra cómo escalar imágenes más simplemente sin un ImageObserver. La escala se realiza dibujando el icono en un BufferedImage en su lugar.

import javax.swing.ImageIcon; 
import java.awt.image.BufferedImage; 
import java.awt.Image; 
import java.awt.Color; 
import java.awt.Graphics2D; 
import java.io.File; 
import javax.imageio.ImageIO; 
import java.awt.RenderingHints; 

public class Tushar2 
{ 
     public void scaleImage() 
     { 
       try 
       { 
         ImageIcon ii = new ImageIcon("/tmp/apple.jpg"); 
         BufferedImage bi = new BufferedImage(50, 50, BufferedImage.TYPE_INT_RGB); 
         Graphics2D g2d = (Graphics2D)bi.createGraphics(); 
         g2d.addRenderingHints(new RenderingHints(RenderingHints.KEY_RENDERING, 
           RenderingHints.VALUE_RENDER_QUALITY)); 
         boolean b = g2d.drawImage(ii.getImage(), 0, 0, 50, 50, null); 
         System.out.println(b); 
         ImageIO.write(bi, "jpg", new File("/tmp/apple50.jpg")); 
       } 
       catch (Exception e) 
       { 
         e.printStackTrace(); 
       } 
     } 

     public static void main(String []args) 
     { 
       new Tushar2().scaleImage(); 
     } 
} 
2

Puede volver a ajustar la imagen en un icono de imagen. Un ícono de imagen generalmente carga la imagen en su constructor y usa su propio rastreador de medios para este propósito. Estoy utilizando el siguiente código ahora:

 Image image = icon.getImage().getScaledInstance(
      icon.getIconWidth() * NEW/OLD, 
      icon.getIconHeight() * NEW/OLD, 
      Image.SCALE_SMOOTH); 
    icon = new ImageIcon(image, icon.getDescription()); 

Se puede trabajar directamente con el nuevo icono, o llame getImage() para trabajar con la nueva imagen. El código anterior también tiene una relación de aspecto que preserva la escala dada en algunos pares NUEVOS y VIEJOS.

Adiós

Cuestiones relacionadas