2012-07-25 368 views
0

任何人都可以解释这一点,有3种方法可以创建Image对象,但只有最后一个对象(k)可以使用getscalledinstance()成功缩放。在java中使用getScaledInstance()缩小图像

public class scalingTest extends JPanel { 

    public static Image i; 
    public static Image j; 
    public static Image k; 
    scalingTest() throws IOException 
    { 
     i = Toolkit.getDefaultToolkit().getImage("C:/Users/Prashant/Desktop/2.png"); 
     j = new ImageIcon("C:/Users/Prashant/Desktop/2.png").getImage(); 
     k = ImageIO.read(new File("C:/Users/Prashant/Desktop/2.png")); 
    } 
    public static void main(String s[]) throws IOException 
    { 
     JFrame jf = new JFrame("Scaling TEST"); 
     jf.add(new scalingTest()); 
     jf.setSize(500, 500); 
     jf.setVisible(true); 
    } 
    @Override 
    public void paintComponent(Graphics g) 
    { 
     g.drawImage(i.getScaledInstance(100, 100, Image.SCALE_DEFAULT), 0, 0, this); 
     g.drawImage(j.getScaledInstance(100, 100, Image.SCALE_DEFAULT), 100, 100, this); 
     g.drawImage(k.getScaledInstance(100, 100, Image.SCALE_DEFAULT), 200, 200, this); 
    } 
} 

回答

0

阅读Image.getScaledInstance的Javadoc中:返回

Image对象将呈现 在指定widthheight默认图像。即使原始源图像 已完全加载,也可以异步加载新的Image对象 。

确保缩放后的图像确实是当您尝试绘制(寻找“确保图像满载”如果您需要咨询如何做到这一点)。它与通过ImageIO获得的图像一起工作的原因是ImageIO为您提供了一个BufferedImage,并且始终加载该图像。

另请注意:为了简单地将图像绘制为除图像大小以外的大小,您不需要创建缩放实例 - 图形具有方法以实时绘制不同大小的图像。根据使用情况,您可能会更好使用它。

+0

感谢兄弟,这是非常有帮助的 – 2012-07-27 17:21:46