2012-07-25 3 views
0

누구나 설명 할 수 있습니까? 이미지 객체를 만들었지 만 getscalledinstance()를 사용하여 마지막 객체 (k) 만 성공적으로 크기 조정할 수있는 3 가지 방법이 있습니다.자바에서 getScaledInstance()로 scalling 이미지

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

감사합니다. 매우 도움이되었습니다. –