J'essaie de faire en sorte qu'une image corresponde à un JLabel. Je souhaite réduire les dimensions de l’image à quelque chose de plus approprié pour mon Swan JPanel.
J'ai essayé avec setPreferredSize mais cela ne fonctionne pas.
Je me demande s'il existe un moyen simple de le faire? Devrais-je redimensionner l'image à cette fin?
Voici les étapes à suivre.
Il n'est pas nécessaire de définir la taille préférée du JLabel. Une fois que vous avez redimensionné l'image à la taille souhaitée, le JLabel prendra la taille d'ImageIcon.
BufferedImage img = null;
try {
img = ImageIO.read(new File("strawberry.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
Image dimg = img.getScaledInstance(label.getWidth(), label.getHeight(),
Image.SCALE_SMOOTH);
Assurez-vous que la largeur et la hauteur de l'étiquette ont les mêmes proportions que la largeur et la hauteur de l'image d'origine. En d'autres termes, si l'image est de 600 x 900 pixels, redimensionnez à 100 x 150. Sinon, votre image sera déformée.
ImageIcon imageIcon = new ImageIcon(dimg);
Tu peux l'essayer:
ImageIcon imageIcon = new ImageIcon(new ImageIcon("icon.png").getImage().getScaledInstance(20, 20, Image.SCALE_DEFAULT));
label.setIcon(imageIcon);
Ou en une ligne:
label.setIcon(new ImageIcon(new ImageIcon("icon.png").getImage().getScaledInstance(20, 20, Image.SCALE_DEFAULT)));
Le temps d'exécution est beaucoup plus rapide que Fichier et ImageIO.
Je vous recommande de comparer les deux solutions en boucle.
La méthode la plus simple et la plus simple pour redimensionner une image à l'aide de Java Swing est la suivante:
jLabel.setIcon(new ImageIcon(new javax.swing.ImageIcon(getClass().getResource("/res/image.png")).getImage().getScaledInstance(200, 50, Image.SCALE_SMOOTH)));
Pour un meilleur affichage, identifiez la hauteur et la largeur réelles de l'image et redimensionnez-les en fonction du pourcentage largeur/hauteur.
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;
}
j'ai fait ce qui suit et cela a fonctionné parfaitement
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) {
}
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.");
}
}
Ou tu peux le faire de cette façon. La fonction u mettre les 6 lignes ci-dessous lève une exception IOException Et prendra votre JLabel en paramètre.
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;
Assignez votre image à une chaîne . Par exemple, imageMaintenant, définissez l'icône sur un labe de taille fixe.
image.setIcon (nouveau javax.swing.ImageIcon (image.getScaledInstance (50,50, WIDTH)));