调整图像java getScaledInstance的大小

这是我的代码“

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对上给出的保持缩放的宽高比。

再见