Java Toolkit.getDefaultToolkit().getImage

benoit_28 Messages postés 55 Date d'inscription   Statut Membre Dernière intervention   -  
luckydu43 Messages postés 4502 Date d'inscription   Statut Membre Dernière intervention   -

Je n'arrive plus à afficher les commentaires du "help" sur mon application (j'ai déjà exposé mon problème et je croyais avoir reçu la solution par un chat.bot, mais finalement ça ne marche toujours pas).

Ce que je fais maintenant, qui est plus précis que précédemment:

Image image_ecran=createImage(1140,800);System.out.println(" image_ecran* "+image_ecran);

gTampon_ecran=image_ecran.getGraphics();

nom=javadir+"appli_puits_puits_de_potentiel.jpg";//nom du commentaire et emplacament javadir sur mon disque, véririé N fois

image_ecran=Toolkit.getDefaultToolkit().getImage(nom);

System.out.println(" image_ecran *** "+image_ecran);
Tracker tracker=new MediaTracker(this);tracker.addImage(image_ecran,0);

       try {tracker.waitForID(0);}
       catch (InterruptedException e) {
           System.out.println(" image2 pas arrivee?");
       }
    int imagew=image_ecran.getWidth(this);
    int imageh=image_ecran.getHeight(this);
    System.out.println(" ****imagew "+imagew+" imageh "+imageh);

Resultat:  imagew et imageh valent -1 rous les deux, au lieu de 1140 et 800

et l'adresse de image_ecran est  sun.awt.image.ToolkitImage@233c0b17 au lieu de  BufferedImage@2ac1fdc4 avant l'appel au toolkit.

et je n'ai evidemment pas le commantaire désiré sur le gTampon_ecran (couplé à image_ecran). En fait, le tracker ne me semble pas en cause. Ce qui est en cause, c'est (me semble-t-il) la différence d'adresse de l'image avant et après l'appel au toolkit. Un peu comme si j'avais demandé un tournevis dans la boîe à outils (le toolkit) et qu'on m'avait donné un marteau.

J'ai tourné dans tous les sens ce problème, mais je tombe toujurs sur la même conclusion.

D'avance MERCI.

1 réponse

  1. luckydu43 Messages postés 4502 Date d'inscription   Statut Membre Dernière intervention   1 178
     

    Bonjour,

    Je suis reparti de la conv initiale (lien) pour comprendre un peu mieux le but du programme.

    Sans avoir obtenu toutes mes réponses pour autant --', j'ai déjà pu identifier 2 problèmes dans le code :

    • image_ecran était créé comme tampon 1140x800 puis remplacé par la valeur de Toolkit.getImage(nom)
    • gTampon_ecran restait associée à l’ancienne image et dessinait dans l’ancien tampon au lieu de dans la nouvelle image image_ecran
    • Les valeurs Width/Height à -1 venaient du chargement KO par Toolkit

    Les changements effectués :

    • Toolkit.getImage devient ImageIO.read mais charge le JPG dans un BufferedImage
    • image chargée dans une variable plus claire image_depuis_nom
    • revue du process d'écriture et de gestion des tampons
    • MediaTracker j'ai juste préféré m'en passer pour simplification
    • en bonus parce qu'on est ici pour les bonnes pratiques, File pour contrôles du fichier
    • j'ai laissé les variables en snake_case mais le camelCase est à préférer
    • j'ai commenté un minimum pour éclaircir, ça aussi c'est une bonne pratique
    • le balisage de code aussi, c'est mieux pour lire. Tu l'avais pourtant bien fait dans ton post précédent --'
    //nom du commentaire et emplacement javadir sur mon disque, vérifié N fois
    File fichier = new File(javadir, "appli_puits_puits_de_potentiel.jpg");
    /*
     * fichier JPG
     *  | ImageIO.read()
     * \|/                             gTampon_ecran
     * image_depuis_nom BufferedImage /      
     *  |drawImage()                 /
     * \|/                         |/_
     *  +--------------------------+
     *  |  image_ecran 1140 x 800  |
     *  +--------------------------+
     */
    try {
      System.out.println(" ****Ouverture du fichier : " + fichier.getAbsolutePath());
      System.out.println(" ****Fichier existe : " + fichier.exists());
      // Utilisation d'un BufferedImage depuis ImageIO
      BufferedImage image_depuis_nom = ImageIO.read(new File(nom));
      if (image_depuis_nom == null) System.out.println(" ****Fichier trouvé, image KO");
      else {
    	int image_w=image_depuis_nom.getWidth();
    	int image_h=image_depuis_nom.getHeight();
    	System.out.println(" ****image_w : " + image_w + ", image_h : " + image_h);  
        // Création du tampon image_ecran
        BufferedImage image_ecran = new BufferedImage(1140, 800, BufferedImage.TYPE_INT_RGB);
        // Graphics associé au tampon image_ecran remplacé
        gTampon_ecran = image_ecran.getGraphics();
        // Dessiner image_depuis_nom dans le tampon gTampon_ecran remplacé par la valeur de image_ecran
        gTampon_ecran.drawImage(image_depuis_nom, 0, 0, null);
      }
    } catch (IOException e) {
        System.out.println(" ****image2 pas arrivee? cause : " + e.getMessage());
    }

    Tiens au jus ;-)


    0