изменение размера изображения java getScaledInstance - PullRequest
7 голосов
/ 31 августа 2011

вот мой код "

ImageIcon ii=new ImageIcon("/Users/tushar_chutani/Desktop/apple.jpg");  

Image image= ii.getImage().getScaledInstance(50, 50, Image.SCALE_SMOOTH);

изображение не масштабируется, что не так с кодом?

Ответы [ 3 ]

15 голосов
/ 03 сентября 2011

Проблема в том, что Image.getScaledInstance() не возвращает законченное, масштабированное изображение. Это оставляет большую часть работы по масштабированию на потом время использования пикселей изображения.

Например, если вы используете масштабированное изображение в Graphics2D.drawImage() вызовите метод вернет false и продолжит рисование асинхронно. Затем вы должны использовать ImageObserver параметр в Graphics2D.drawImage() вызове для ожидания завершения масштабирования и рисования.

В следующем примере показано, как проще масштабировать изображения без ImageObserver. Масштабирование выполняется путем рисования иконки. вместо BufferedImage.

import javax.swing.ImageIcon;
import java.awt.image.BufferedImage;
import java.awt.Image;
import java.awt.Color;
import java.awt.Graphics2D;
import java.io.File;
import javax.imageio.ImageIO;
import java.awt.RenderingHints;

public class Tushar2
{
        public void scaleImage()
        {
                try
                {
                        ImageIcon ii = new ImageIcon("/tmp/apple.jpg");
                        BufferedImage bi = new BufferedImage(50, 50, BufferedImage.TYPE_INT_RGB);
                        Graphics2D g2d = (Graphics2D)bi.createGraphics();
                        g2d.addRenderingHints(new RenderingHints(RenderingHints.KEY_RENDERING,
                                RenderingHints.VALUE_RENDER_QUALITY));
                        boolean b = g2d.drawImage(ii.getImage(), 0, 0, 50, 50, null);
                        System.out.println(b);
                        ImageIO.write(bi, "jpg", new File("/tmp/apple50.jpg"));
                }
                catch (Exception e)
                {
                        e.printStackTrace();
                }
        }

        public static void main(String []args)
        {
                new Tushar2().scaleImage();
        }
}
2 голосов
/ 18 августа 2016

Вы можете снова обернуть изображение в значок изображения. Значок изображения обычно загружает изображение в его конструктор и использует для этого собственный медиа-трекер. Я сейчас использую следующий код:

     Image image = icon.getImage().getScaledInstance(
          icon.getIconWidth() * NEW / OLD,
          icon.getIconHeight() * NEW / OLD,
          Image.SCALE_SMOOTH);
     icon = new ImageIcon(image, icon.getDescription());

Вы можете напрямую работать с новым значком или вызывать getImage () для работы с новым изображением. Приведенный выше код также выполняет масштабирование с сохранением соотношения сторон, заданное для некоторых пар NEW и OLD.

Bye

0 голосов
/ 31 марта 2019

Ваш код:

ImageIcon ii=new 
ImageIcon("/Users/tushar_chutani/Desktop/apple.jpg");  

Добавьте это:

Image image= ii.getImage().getScaledInstance(50, 50, 
Image.SCALE_SMOOTH);
ii=new ImageIcon(image);

ЕСЛИ ВЫ ХОТИТЕ отобразить: Добавьте это ..

jLabel1.setIcon(ii);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...