it-swarm.com.de

Passen Sie die Größe eines Bildes an ein JLabel an

Ich versuche, ein Bild für ein JLabel zu machen. Ich möchte die Bildabmessungen auf ein für mein Swing JPanel passenderes Maß reduzieren. 

Ich habe es mit setPreferredSize versucht, aber es funktioniert nicht.

Ich frage mich, ob es einen einfachen Weg gibt, dies zu tun? Soll ich das Bild für diesen Zweck skalieren?

24
user1680212

Gliederung

Hier sind die Schritte, die zu befolgen sind.

  • Lesen Sie das Bild als BufferedImage.
  • Ändern Sie die Größe des BufferedImage auf ein anderes BufferedImage, das der Größe des JLabels entspricht.
  • Erstellen Sie ein ImageIcon aus dem BufferedImage, dessen Größe geändert wurde.

Sie müssen die bevorzugte Größe des JLabels nicht festlegen. Wenn Sie das Bild auf die gewünschte Größe skaliert haben, nimmt das JLabel die Größe des ImageIcon an.

Lesen Sie das Bild als BufferedImage

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

Ändern Sie die Größe des BufferedImage

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

Vergewissern Sie sich, dass die Breite und Höhe des Etiketts den Proportionen der Originalbreite und -höhe entsprechen. Wenn das Bild also 600 x 900 Pixel ist, skalieren Sie es auf 100 x 150. Andernfalls wird Ihr Bild verzerrt.

Erstellen Sie ein ImageIcon

ImageIcon imageIcon = new ImageIcon(dimg);
56

Du kannst es versuchen:

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

Oder in einer Zeile:

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

Die Ausführungszeit ist viel schneller als File und ImageIO.

Ich empfehle Ihnen, die beiden Lösungen in einer Schleife zu vergleichen.

23
Tirz

Der beste und einfachste Weg zur Bildgrößenänderung mit Java Swing ist:

jLabel.setIcon(new ImageIcon(new javax.swing.ImageIcon(getClass().getResource("/res/image.png")).getImage().getScaledInstance(200, 50, Image.SCALE_SMOOTH)));

Ermitteln Sie zur besseren Anzeige die tatsächliche Höhe und Breite des Bildes und ändern Sie die Größe entsprechend dem prozentualen Breiten-/Höhenwert

4
Renjith Thomas
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;
}
4
amr foda

ich habe folgendes getan und es hat perfekt funktioniert

try {
        JFileChooser jfc = new JFileChooser();
        jfc.showOpenDialog(null);
        File f = jfc.getSelectedFile();
        Image bi = ImageIO.read(f);
        image1.setText("");
        image1.setIcon(new ImageIcon(bi.getScaledInstance(int width, int width, int width)));

    } catch (Exception e) {
    } 
3
shexaMartin
public void selectImageAndResize(){    
    int returnVal = jFileChooser.showOpenDialog(this); //open jfilechooser
    if (returnVal == jFileChooser.APPROVE_OPTION) {    //select image
        File file = jFileChooser.getSelectedFile();    //get the image
        BufferedImage bi;
        try {
            //
            //transforms selected file to buffer
            //
            bi=ImageIO.read(file);  
            ImageIcon iconimage = new ImageIcon(bi);

            //
            //get image dimensions
            //
            BufferedImage bi2 = new BufferedImage(iconimage.getIconWidth(), iconimage.getIconHeight(), BufferedImage.TYPE_INT_ARGB); 
            Graphics g = bi.createGraphics();
            iconimage.paintIcon(null, g, 0,0);
            g.dispose();

            //
            //resize image according to jlabel
            //
            BufferedImage resizedimage=resize(bi,jLabel2.getWidth(), jLabel2.getHeight()); 
            ImageIcon resizedicon=new ImageIcon(resizedimage);
            jLabel2.setIcon(resizedicon);
        } catch (Exception ex) {
            System.out.println("problem accessing file"+file.getAbsolutePath());
        }
    }
    else {
        System.out.println("File access cancelled by user.");
    }
}
2
pettlaurence

Oder du kannst es so machen. Die Funktion, die Sie mit den untersten 6 Zeilen setzen, löst eine IOException aus. Und wird Ihr JLabel als Parameter verwenden.

BufferedImage bi=new BufferedImage(label.width(),label.height(),BufferedImage.TYPE_INT_RGB);

Graphics2D g=bi.createGraphics();

Image img=ImageIO.read(new File("path of your image"));

g.drawImage(img, 0, 0, label.width(), label.height(), null);

g.dispose();

return bi;

Weisen Sie Ihr Bild einer Zeichenfolge zu . Zum Beispiel imageJetzt das Symbol auf eine feste Größe setzen.

image.setIcon (neues javax.swing.ImageIcon (image.getScaledInstance (50,50, WIDTH)));

0
muabal