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();
}
}
¿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
la imagen no se muestra ... la imagen cambia a blanco ... –
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