web-dev-qa-db-fra.com

Comment redimensionner JLabel ImageIcon?

Je crée une application Java Swing ayant la présentation suivante ( MigLayout ):

[icon][icon][icon][....]
where icon = jlabel and the user can add more icons

Lorsque l'utilisateur ajoute ou supprime des icônes, les autres doivent être réduites ou agrandies.

Ma question est très simple: j'ai un JLabel qui contient un ImageIcon; Comment puis-je redimensionner cette icône?

42
Marcos Roriz Junior

Redimensionner l’icône n’est pas simple. Vous devez utiliser les graphiques 2D de Java pour redimensionner l'image. Le premier paramètre est une classe Image que vous pouvez facilement obtenir de la classe ImageIcon. Vous pouvez utiliser ImageIcon class pour charger votre fichier image, puis appeler simplement la méthode getter pour obtenir l'image.

private Image getScaledImage(Image srcImg, int w, int h){
    BufferedImage resizedImg = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
    Graphics2D g2 = resizedImg.createGraphics();

    g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    g2.drawImage(srcImg, 0, 0, w, h, null);
    g2.dispose();

    return resizedImg;
}
62
Suken Shah

Essaye ça :

ImageIcon imageIcon = new ImageIcon("./img/imageName.png"); // load the image to a imageIcon
Image image = imageIcon.getImage(); // transform it 
Image newimg = image.getScaledInstance(120, 120,  Java.awt.Image.SCALE_SMOOTH); // scale it the smooth way  
imageIcon = new ImageIcon(newimg);  // transform it back

(trouvé le ici )

75
trolologuy

Et qu'en est-il ?:

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

De: Redimensionner une image pour l’adapter à un JLabel

26
tirz

Cela gardera le bon rapport d'aspect.

    public ImageIcon scaleImage(ImageIcon the_icon, int the_w, int the_h)
    {
        int nw = icon.getIconWidth();
        int nh = icon.getIconHeight();

        if(icon.getIconWidth() > w)
        {
          nw = w;
          nh = (nw * icon.getIconHeight()) / icon.getIconWidth();
        }

        if(nh > h)
        {
          nh = h;
          nw = (icon.getIconWidth() * nh) / icon.getIconHeight();
        }

        return new ImageIcon(icon.getImage().getScaledInstance(nw, nh, Image.SCALE_DEFAULT));
    }
4
Kyle Phillips

Un moyen (rapide et sale) de redimensionner les images pour utiliser HTML et spécifier la nouvelle taille dans l'élément image. Cela fonctionne même pour les images animées avec transparence.

3
Andrew Thompson

Je conviens que ce code fonctionne, pour dimensionner un ImageIcon à partir d'un fichier à afficher tout en conservant le rapport d'aspect que j'ai utilisé ci-dessous.

/*
 * source File of image, maxHeight pixels of height available, maxWidth pixels of width available
 * @return an ImageIcon for adding to a label
 */


public ImageIcon rescaleImage(File source,int maxHeight, int maxWidth)
{
    int newHeight = 0, newWidth = 0;        // Variables for the new height and width
    int priorHeight = 0, priorWidth = 0;
    BufferedImage image = null;
    ImageIcon sizeImage;

    try {
            image = ImageIO.read(source);        // get the image
    } catch (Exception e) {

            e.printStackTrace();
            System.out.println("Picture upload attempted & failed");
    }

    sizeImage = new ImageIcon(image);

    if(sizeImage != null)
    {
        priorHeight = sizeImage.getIconHeight(); 
        priorWidth = sizeImage.getIconWidth();
    }

    // Calculate the correct new height and width
    if((float)priorHeight/(float)priorWidth > (float)maxHeight/(float)maxWidth)
    {
        newHeight = maxHeight;
        newWidth = (int)(((float)priorWidth/(float)priorHeight)*(float)newHeight);
    }
    else 
    {
        newWidth = maxWidth;
        newHeight = (int)(((float)priorHeight/(float)priorWidth)*(float)newWidth);
    }


    // Resize the image

    // 1. Create a new Buffered Image and Graphic2D object
    BufferedImage resizedImg = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
    Graphics2D g2 = resizedImg.createGraphics();

    // 2. Use the Graphic object to draw a new image to the image in the buffer
    g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    g2.drawImage(image, 0, 0, newWidth, newHeight, null);
    g2.dispose();

    // 3. Convert the buffered image into an ImageIcon for return
    return (new ImageIcon(resizedImg));
}
3
Adam