这是我的代码
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并继续异步绘制。然后,您需要在Graphics2D.drawImage()
调用中使用ImageObserver
参数来等待缩放和绘制完成。
以下示例展示了如何更简单地缩放图像,而无需使用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()来使用新图像。上述代码还提供了一种基于某些NEW和OLD对进行宽高比保持缩放的方法。
再见
你的代码:
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);