2012-01-07 10 views
2

は、なぜ、この行います画像のgetWidthとのgetHeightは-1を返す不適切

URL url = MinecraftPlatformGame.class.getResource("images/diamondPick.png"); 
image = Toolkit.getDefaultToolkit().getImage(url); 
int width = image.getWidth(null); 
int height = image.getHeight(null); 
System.out.println(width); 
System.out.println(height); 

戻り-1のための両方widthheight

編集:私は考え出した前に私がいかに私の質問の答えは実際にでしたそれを修正するはずです。 私は次の操作を行って、それを修正:私は今持っている

URL url = MinecraftPlatformGame.class.getResource("images/diamondPick.png"); 
image = Toolkit.getDefaultToolkit().getImage(url); 
MediaTracker mTracker = new MediaTracker(this); 
    mTracker.addImage(image,1); 
     try { 
      mTracker.waitForID(1); 
     } catch (InterruptedException ex) { 
      Logger.getLogger(MinecraftPlatformGame.class.getName()).log(Level.SEVERE, null, ex); 
     } 
int width = image.getWidth(null); 
int height = image.getHeight(null); 
System.out.println(width); 
System.out.println(height); 

url = MinecraftPlatformGame.class.getResource("images/gui.png"); 
image1 = Toolkit.getDefaultToolkit().getImage(url); 
    mTracker.addImage(image1,2); 
     try { 
      mTracker.waitForID(2); 
     } catch (InterruptedException ex) { 
      Logger.getLogger(MinecraftPlatformGame.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     width = image1.getWidth(null); 
height = image1.getHeight(null); 
System.out.println(width); 
System.out.println(height); 

問題は、これは非常に効率的でいないようにも、私は2枚の画像をインポートしてサイズを与えられるだけのために多くのコードを必要としなければならないように、それは思えるんです。これを行うより効率的で簡単な方法がありますか? Javadocの当たり

答えて

4

幅はまだ知られていない場合、このメソッドは-1を返し、 指定されたImageObserverオブジェクトには、後で通知されます。

あなたの編集に応じて、Russellのコメントに続いて、完全に読み込まれた画像を取得する代わりにImageIO.read()を使用してください。

+4

ImageIO.read()は、常に完全にロードされたイメージを返します。 –

+0

私は正確な幅と高さを返すmediatrackerで質問を更新しましたが、それは2つの画像だけにすぎないと考えるとまだ非効率的です。私は、リソースとして写真をインポートし、より良い方法で幅と高さを取得するより良い方法があると仮定しています。 @RussellZahniser – ComputerLocus

+1

必要なものは 'image = ImageIO.read(url)'です。それで 'image.getWidth()'はMediaTrackerを必要とせず、最初から正しいでしょう。 –