Java 25 ; problème pour créer une image

Résolu
benoit_28 Messages postés 54 Date d'inscription   Statut Membre Dernière intervention   -  
 CCMBot -

Bonjour.

Depuis quelques jours, je bute sur le problème suivant.

Ce que je fais :

System.out.println(" name " + name);
Image im = createImage(500,700);
int imagew = im.getWidth(this);
int imageh = im.getHeight(this);
System.out.println(" imagew " + imagew + " imageh " + imageh);
gTTampon = im.getGraphics();
im = Toolkit.getDefaultToolkit().getImage(name);
System.out.println(" im " + im);

imagew = im.getWidth(this);
imageh = im.getHeight(this);

System.out.println(" **imagew " + imagew + " imageh " + imageh);


Et voilà le résultat :

 name c:/Users/MASTER/Java/jk17/en_francais/application_puits_mar_2025/appli_puits_etats 2 et 3 dimensions.jpg image_comm sun.awt.image.ToolkitImage@436a4e4b

imagew 500 imageh 700

im sun.awt.image.ToolkitImage@436a4e4b

**imagew -1 imageh -1

En résumé : le nom est initialement correct, la création de l'image est correcte aussi (avec la largeur et la hauteur annoncées). L'image im semble correcte également. 

Par contre, ce qui sort après l'instruction toolkit est incorrect. La largeur et la hauteur, qui étaient correctes avant cette instruction, sont passées à -1. En fait, l'instruction toolkit assigner la valeur -1 à la largeur et la hauteur pour indiquer qu'il y avait un problème, mais lequel ????

La suite est évidente ; je ne peux pas afficher le commentaire inclus dans name. Cela fait plusieurs jours que je cherche !

Merci d'avance pour votre réponse.

2 réponses

  1. Diablo76 Messages postés 348 Date d'inscription   Statut Membre Dernière intervention   141
     

    Salut,

    C'est cohérent puisque la variable "name" n'est pas initialisée donc ne contient rien.

    Il faudrait voir comment tu déclares "name"

    0
  2. CCMBot
     

    Bonjour !
    C'est moi, Bobot, l'IA prête à vous surprendre !
    Il semble que votre problème se situe au niveau de l'instruction Toolkit.getImage(). Cette instruction charge une image de manière asynchrone, ce qui signifie que lorsqu'elle est appelée, elle retourne immédiatement un objet Image sans attendre que l'image soit complètement chargée.

    C'est pourquoi vous obtenez des valeurs de largeur et de hauteur -1, car l'image n'est pas encore prête au moment où vous appelez getWidth() et getHeight().

    Une solution à ce problème serait d'utiliser un MediaTracker pour attendre que l'image soit complètement chargée avant de faire quoi que ce soit d'autre. Voici un exemple de code qui illustre comment faire cela :
     

    MediaTracker m = new MediaTracker(this);
    Image im = Toolkit.getDefaultToolkit().getImage(name);
    m.addImage(im,0);
    
    try {
      m.waitForAll();
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    
    int imageW = image.getWidth(this);
    int imageH = image.getHeight(this);
    

    Ce code ajoute l'image au MediaTracker, attend que toutes les images soient chargées (c'est ce que fait m.waitForAll()), puis récupère la largeur et la hauteur de l'image.

    0