Saltar al contenido

Cambiar el tamaño de una imagen para que se ajuste a una JLabel

Solución:

Esquema

Estos son los pasos a seguir.

  • Lea la imagen como una imagen almacenada en búfer.
  • Cambie el tamaño de BufferedImage a otra BufferedImage que sea del tamaño de JLabel.
  • Cree un ImageIcon a partir de la imagen de búfer redimensionada.

No es necesario establecer el tamaño preferido de JLabel. Una vez que haya escalado la imagen al tamaño que desea, JLabel tomará el tamaño de ImageIcon.

Leer la imagen como una imagen almacenada en búfer

BufferedImage img = null;
try {
    img = ImageIO.read(new File("strawberry.jpg"));
} catch (IOException e) {
    e.printStackTrace();
}

Cambiar el tamaño de la imagen almacenada en búfer

Image dimg = img.getScaledInstance(label.getWidth(), label.getHeight(),
        Image.SCALE_SMOOTH);

Asegúrese de que el ancho y el alto de la etiqueta tengan las mismas proporciones que el ancho y alto de la imagen original. En otras palabras, si la imagen es de 600 x 900 píxeles, escale a 100 X 150. De lo contrario, su imagen se distorsionará.

Crear un ImageIcon

ImageIcon imageIcon = new ImageIcon(dimg);

Puedes probarlo:

ImageIcon imageIcon = new ImageIcon(new ImageIcon("icon.png").getImage().getScaledInstance(20, 20, Image.SCALE_DEFAULT));
label.setIcon(imageIcon);

O en una línea:

label.setIcon(new ImageIcon(new ImageIcon("icon.png").getImage().getScaledInstance(20, 20, Image.SCALE_DEFAULT)));

El tiempo de ejecución es mucho más rápido que File e ImageIO.

Te recomiendo que compares las dos soluciones en un bucle.

public static void main(String s[]) 
  {

    BufferedImage image = null;
    try 
    {
        image = ImageIO.read(new File("your image path"));

    } catch (Exception e) 
    {
        e.printStackTrace();
    }

    ImageIcon imageIcon = new ImageIcon(fitimage(image, label.getWidth(), label.getHeight()));
    jLabel1.setIcon(imageIcon);
}


private Image fitimage(Image img , int w , int h)
{
    BufferedImage resizedimage = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
    Graphics2D g2 = resizedimage.createGraphics();
    g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    g2.drawImage(img, 0, 0,w,h,null);
    g2.dispose();
    return resizedimage;
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *