IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Applets Java Discussion :

Algo d'affichage de vignettes non fiable


Sujet :

Applets Java

  1. #1
    Invité
    Invité(e)
    Par défaut Algo d'affichage de vignettes non fiable
    bonjour

    j'essaye de realiser une applet qui presente sous forme de vignettes
    les images d'un repertoire

    Seulement a chaque execution, le resultat est different
    et en general, a partir de la 6 ou 7eme execution, les executions suivantes donne le resultat attendu.

    voici la methode init() de mon applet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    public void init() {
          ....
     
          for (int i=0; i<pixStrVect.size(); i++)
          {
    	pix = getImage(getCodeBase(), pixStrVect.elementAt(i));
    	pixWidth = pix.getWidth(this);
    	pixHeight = pix.getHeight(this);
     
    	if (pixWidth == pixHeight)
    	{
    		thumbWidth = 101;
    		thumbHeight = 101;
    	}
    	else if (pixWidth > pixHeight)
    	{
    		thumbWidth = 102;
    		thumbHeight = 103;	
    	}
    	else if (pixWidth < pixHeight) 
    	{
    		thumbHeight = 104;
    		thumbWidth = 105;
    	}
     
    	thumbWidthVect.add(thumbWidth);
    	thumbHeightVect.add(thumbHeight);
    	pixWidthVect.add(pixWidth);
    	pixHeightVect.add(pixHeight);
     
    	thumb = pix.getScaledInstance(thumbWidth, thumbHeight, pix.SCALE_FAST);	
    	thumbVect.add(thumb);
            }
    }
    Dans la methode paint() il y a une boucle sur toutes les images
    dans chaque iteration j'affiche entre crochet la taille de l'image initiale
    et entre parenthese la taille de la vignette
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    g.drawImage(thumbVect.elementAt(i), x, 0, this);
     
    g.drawString(pixStrVect.elementAt(i), x, y);
     
    g.drawString(""+i+":["+pixWidthVect.elementAt(i)+","+pixHeightVect.elementAt(i)+"]"+
    "("+thumbWidthVect.elementAt(i)+","+thumbHeightVect.elementAt(i)+")",
    x,
    y);
    voila le resultat

    execution 1: -1 de partout !!


    execution 2: la hauteur 375 de la 1ere image est bonne


    execution 4 a 6: comme l'execution 1

    execution 7: tout est bon !!


    Si quelqu'un peut m'aider je l'en remercie.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Points : 626
    Points
    626
    Par défaut
    Fait des tests !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    pixWidth = pix.getWidth(this);
    pixHeight = pix.getHeight(this);
    /* puis tu rajoute */
    System.out.println("Taille de l'image avant stockage dans le vecteur"+pixWidth+"/"+pixHeight".");
    Et si cela se trouve l'erreur est en amont...

    Deja un truc a verifier :

    API :
    public Image getImage(URL url, String name)
    This method always returns immediately, whether or not the image exists. When this applet attempts to draw the image on the screen, the data will be loaded. The graphics primitives that draw the image will incrementally paint on the screen.

  3. #3
    Invité
    Invité(e)
    Par défaut
    je viens de lire dans la doc
    getWidth
    public abstract int getWidth(ImageObserver observer)Determines the width of the image. If the width is not yet known, this method returns -1 and the specified ImageObserver object is notified later.
    ...
    Ceci explique que les dimensions des images sont parfois de -1

    pour getImage() tu as raison, parfois dans quand on fait g.drawImage()
    les images sont affichées dans le desordre,
    un thread "Image Fetcher N" par image est lancé.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Points : 626
    Points
    626
    Par défaut
    Il faudrait donc forcer le load. Je ne sais pas comment on fait, je ne sais meme pas si c'est possible en dehors de demander un affichage mais si tu as une autre solution je serais interessé ainsi que d'autres j'en suis sur.

  5. #5
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Il faut attendre que les images aient fini de charger a l'aide d'un MediaTracker. Le mieux est d'utiliser la classe ImageIO qui renvoie des images pretes a l'emploi.

Discussions similaires

  1. Affichage de requete non demandé
    Par bigltnt dans le forum Langage
    Réponses: 4
    Dernier message: 10/04/2007, 12h28
  2. Affichage de composants non synchronisés
    Par hugo1992 dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 01/04/2007, 19h19
  3. Comportement non fiable de "Calendar" ?
    Par deno38 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 27/12/2006, 22h35
  4. Problème d'affichage des caratères non UTF-8
    Par tit_pierre dans le forum Langage
    Réponses: 1
    Dernier message: 07/09/2006, 23h11
  5. Algo de suppression de balise non HTML..
    Par quantik-revolution dans le forum Langage
    Réponses: 1
    Dernier message: 11/06/2006, 11h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo