Подтвердить что ты не робот

Измените размер изображения в соответствии с JLabel

Я пытаюсь сделать картинку подходящей JLabel. Я хочу уменьшить размеры изображения к чему-то более подходящему для моего Swing JPanel.

Я попытался с setPreferredSize, но он не работает.

Мне интересно, есть ли простой способ сделать это? Должен ли я масштабировать изображение для этой цели?

4b9b3361

Ответ 1

Структура

Ниже приведены шаги, которые необходимо выполнить.

  • Прочитайте изображение как BufferedImage.
  • Измените размер BufferedImage на другой BufferedImage, размер JLabel.
  • Создайте ImageIcon из измененного размера BufferedImage.

Вам не нужно устанавливать предпочтительный размер JLabel. Как только вы масштабируете изображение до требуемого размера, JLabel примет размер ImageIcon.

Прочитайте изображение как BufferedImage

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

Измените размер BufferedImage

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

Убедитесь, что ширина и высота ярлыка совпадают с исходной шириной и высотой изображения. Другими словами, если изображение составляет 600 x 900 пикселей, масштаб до 100 X 150. В противном случае изображение будет искажено.

Создайте ImageIcon

ImageIcon imageIcon = new ImageIcon(dimg);

Ответ 2

Вы можете попробовать:

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

Или в одной строке:

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

Время выполнения намного быстрее, чем File и ImageIO.

Я рекомендую вам сравнить два решения в цикле.

Ответ 3

Я сделал следующее, и он отлично работал

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) {
    } 

Ответ 4

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;
}

Ответ 5

Лучший и простой способ изменения размера изображения с использованием Java Swing:

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

Для лучшего отображения определите фактическую высоту и ширину изображения и измените размер в зависимости от ширины/высоты.

Ответ 6

Или вы можете сделать это таким образом. Функция u, помещенная ниже 6 строк, вызовет исключение IOException. И возьмем ваш JLabel в качестве параметра.

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;

Ответ 7

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.");
    }
}

Ответ 8

Назначьте свое изображение строке.  Например изображение Теперь установите значок в папку с фиксированным размером.

image.setIcon(новый javax.swing.ImageIcon(image.getScaledInstance(50,50, WIDTH)));