2012-04-23 1 views
3

tout à fait un débutant ici mais voici un petit code de test qui explique mon problème. La valeur imprimée est -1. Je n'ai pas la moindre idée sur la façon de retourner la largeur en pixels de mon image, est-ce que je manque quelque chose de très évident ici? Tout ce truc de ImageObserver n'a aucun sens !!!Je ne comprends pas la classe Image! Qu'est-ce que je fais mal ici?

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

Répondre

5

Toolkit.getDefaultToolkit().getImage() peut charger de manière asynchrone l'image qui n'est presque jamais ce que vous voulez.

Utilisez ImageIO et BufferedImage au lieu qui a également getWidth() et getHeight() sans paramètre ImageObserver (bien que les autres travailleront aussi bien si vous passez null):

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

Bonne réponse, merci. –

0

Vous utilisez juste les mauvaises classes. Il y a un moyen plus facile de réaliser ce que vous voulez, cela va le faire:

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

Merci les gars, les deux réponses sont super! En passant, ce forum est tellement désordonné, la première fois ici et c'est tellement encombré! Je vous repasserais mais apparemment je ne peux pas "voter" encore! J'avais regardé la classe bufferedimage mais l'API me donnait l'impression d'être effrayante mais l'imageIO rendait les choses plus faciles – Deragon

Questions connexes