2012-01-07 3 views
2

Почему это:Image 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 для обоих width и height

Edit: Мой вопрос, прежде чем я понял, что ответ был на самом деле, как я должен исправить это. Я установил ее, выполнив следующие действия:

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

Проблема У меня сейчас это не кажется очень эффективным и не кажется, что я нужно так много кода только для двух изображений, которые будут импортированы и приведены размеры. Есть ли более эффективный и простой способ сделать это?

ответ

4

согласно Javadoc:

Если ширина еще не известно, этот метод возвращает -1 и указанный объект ImageObserver уведомляется позже.

В ответ на ваше изменение и последующий комментарий Рассела используйте ImageIO.read() вместо этого, чтобы получить полностью загруженное изображение.

+4

Альтернативой является ImageIO.read(), которая всегда возвращает полностью загруженное изображение. –

+0

Хорошо, я обновил свой вопрос с помощью медиатракера, который теперь возвращает правильную ширину, и hegiht все же кажется неэффективным, учитывая, что это только для ДВУХ изображений, но их будет больше. Я предполагаю, что есть лучший способ импортировать фотографию в качестве ресурса и лучше получить ширину и высоту. @RussellZahniser – ComputerLocus

+1

Все, что вам нужно, это 'image = ImageIO.read (url)'. Тогда 'image.getWidth()' будет корректным с самого начала, без необходимости в MediaTracker. –

Смежные вопросы