2012-04-23 2 views
3

여기 초보자가 있지만 여기에 내 문제를 설명하는 작은 테스트 코드가 있습니다. 인쇄 된 값은 -1입니다. 난 그냥 내 이미지의 픽셀 너비를 반환하는 방법에 대한 약간의 단서가 없어, 내가 여기에 아주 명백한 무엇인가 놓치고 있습니까? 이 전체 ImageObserver 물건은 말이되지 않습니다!Image 클래스를 이해할 수 없습니다! 여기서 내가 뭘 잘못하고 있니?

import java.awt.*; 
    import javax.swing.*; 
    import java.awt.event.*; 



    class imagetest2 extends JPanel { 
     Image i =Toolkit.getDefaultToolkit().getImage(/*image*/); 

     public int test(){ 
      int x = i.getWidth(null); 
      return x; 
     } 


    } 

    class imagetest { 
     public static void main(String args[]){ 
      imagetest2 tesst = new imagetest2(); 
      System.out.print(tesst.test()); 
     } 
    } 

답변

5

Toolkit.getDefaultToolkit().getImage()은 거의 원하는 이미지를 비동기 적으로로드 할 수 있습니다.

사용 ImageIO 대신 (당신이 null를 통과하면 다른 사람뿐만 아니라 작동하지만) 또한 ImageObserver 매개 변수없이 getWidth()getHeight()을 가지고 이는 BufferedImage :

BufferedImage image = ImageIO.read("/*image*/"); 
int width = image.getWidth(); 
+1

감사합니다. –

0

당신은 잘못된 클래스를 사용하고 있습니다. 원하는 것을 달성하는 더 쉬운 방법이 있습니다.이 방법은 다음과 같습니다.

import java.awt.image.BufferedImage; 
import java.io.IOException; 
import java.io.File; 
import javax.imageio.ImageIO; 

class ImageTest 
{ 
    BufferedImage img; 

    public static int getWidthFromImage(String filename) 
    { 
     BufferedImage image; 
     int width; 
     try 
     { 
      image = ImageIO.read(new File(filename)); 
      return image.getWidth(); 
     } 
     catch(IOException e) 
     { 
      System.out.println("Something terrible happened! " + e.getMessage()); 
      e.printStackTrace(); 
     } 
     return -1; 
    } 
    public static void main(String args[]) 
    { 
     System.out.print("The width of the image in pixels is: " + getWidthFromImage(args[0])); 
    } 
} 
+0

감사합니다. 두 답변 모두 훌륭합니다! 그런데이 포럼은 너무 지저분 해 처음으로 여기에 너무 어지럽 힙니다! 나는 너희들을 대표 할 것이지만 분명히 나는 ​​아직 "투표"할 수 없다! 나는 bufferedimage 클래스를보고 있었지만 API로 인해 이미지가 너무 무섭다는 느낌을 받았지만 imageIO는 실제로 더 쉽게 만들었습니다. – Deragon

관련 문제