вот мой код
ImageIcon ii=new ImageIcon("/Users/tushar_chutani/Desktop/apple.jpg");
Image image= ii.getImage().getScaledInstance(50, 50, Image.SCALE_SMOOTH);
изображение не масштабируется, что не так с кодом?
вот мой код
ImageIcon ii=new ImageIcon("/Users/tushar_chutani/Desktop/apple.jpg");
Image image= ii.getImage().getScaledInstance(50, 50, Image.SCALE_SMOOTH);
изображение не масштабируется, что не так с кодом?
Проблема заключается в том, что 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();
}
}
Вы можете снова обернуть изображение на значок изображения. Значок изображения обычно загружает изображение в его конструктор и использует для этого свой собственный медиа-трекер. Теперь я использую следующий код:
Image image = icon.getImage().getScaledInstance(
icon.getIconWidth() * NEW / OLD,
icon.getIconHeight() * NEW / OLD,
Image.SCALE_SMOOTH);
icon = new ImageIcon(image, icon.getDescription());
Вы можете напрямую работать с новым значком или вызвать getImage() для работы с новым изображением. Вышеприведенный код также поддерживает масштабирование пропорций, заданное для некоторых НОВЫХ и СТАРЫХ пар.
Bye
Ваш код:
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);