调整图像java getScaledInstance的大小

时间:2011-08-31 05:40:09

标签: java image

这是我的代码“

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

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

图像没有被缩放到代码有什么问题?

3 个答案:

答案 0 :(得分:15)

问题是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();
        }
}

答案 1 :(得分:2)

您可以再次将图像包装在图像图标中。图像图标通常在其构造函数中加载图像,并使用其自己的媒体跟踪器来实现此目的。我现在使用以下代码:

     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对上提供了保持缩放的宽高比。

再见

答案 2 :(得分:0)

您的代码:

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