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

2D Java Discussion :

[Image]comment pre-charger une image [FAQ]


Sujet :

2D Java

  1. #1
    Membre habitué Avatar de al85
    Profil pro
    Inscrit en
    Février 2004
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 158
    Points : 128
    Points
    128
    Par défaut [Image]comment pre-charger une image
    bonjour

    comment peut on precharger une image assez lourde pou qu'elle s'affiche instantanement quand elle doit ?
    j'ai une image qui est affichee dans un jpanel, mais elle n'apparait que quelques secondes apres que la fenetre ne se soit ouverte, et je voudrais qu'elle s'affiche en meme temps.

    merci





    [Modéré par Didier]
    Ajout de tag dans le titre
    Lire les règles du forum : Règles du forum Java

  2. #2
    Membre averti
    Avatar de JHelp
    Inscrit en
    Octobre 2002
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 185
    Points : 444
    Points
    444
    Par défaut
    Ce que tu peut faire c'est attendre que ton image soit finie d'être chargée avnt d'afficher ta fenêtre.
    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
     
    public void attendreCharger(Image image)
    {
         if(image == null)
         {
             return;
          }
        while(image.getWidth(null)<0 || image.getHeight(null)<0)
        {
             //On attends un peu que l'image est avancée dans son chargement avant de regardé si elle est prete. Ne pas mettre un temps d'attente trop court, sinon y a risuque que le cpu soit plus souvent occupé à verifier que l'image est prete que d'avancer sur celle-ci
            try
            {
                Thread.sleep(123);
            }
            catch(Exception e)
             {
              }
         }
    }
    En fait tant que l'image n'est pas complétement chargée en mémoire, elle a des dimensions négative, d'où le code ci-dessus.
    JHelp
    Pour avoir une réponse efficace :
    1) Soyez précis dans vos questions
    2) Choisssez bien votre forum
    3) Consultez la FAQ et la doc avant

  3. #3
    Membre confirmé
    Avatar de Glob
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Avril 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Avril 2002
    Messages : 428
    Points : 630
    Points
    630
    Par défaut
    Lut,

    y'a aussi la solution classique d'utiliser un MediaTracker...

    Attention, c'est du vieux code sale qui date..., merci de ne pas trop critiquer le style!

    Sinon, je te laisse voir et adapter...
    A+
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    import java.awt.Component;
    import java.awt.Image;
    import java.awt.MediaTracker;
    import java.net.URL;
    import java.net.URLClassLoader;
    import java.util.Hashtable;
     
    public class ImageCache extends Component {
     
    	private String[] names =
    		{"img1.png", 
    		 "img2.png", 
    		 "img3.png",
    		};
     
    	private static Hashtable cache;
     
    	public ImageCache() {
    		cache = new Hashtable(names.length);
    		for (int i = 0; i < names.length; i++) {
    			try {
    				cache.put(names[i], getImage(names[i], this));
    			} catch (NullPointerException e) {
    				System.out.println("ImgCache error.");
    			}
    		}
    	}
     
    	public static Image getImage(String name, Component cmp) {
    		Image img = null;
    		if (cache != null) {
    			if ((img = (Image) cache.get(name)) != null) {
    				return img;
    			}
    		}
     
    		URLClassLoader urlLoader =
    			(URLClassLoader) cmp.getClass().getClassLoader();
    		URL fileLoc = urlLoader.findResource("images/" + name);
    		img = cmp.getToolkit().createImage(fileLoc);
     
    		if (fileLoc == null) {
    			System.out.println("Image " + name + " not found.");
    			return null;
    		}
     
    		MediaTracker tracker = new MediaTracker(cmp);
    		tracker.addImage(img, 0);
    		try {
    			tracker.waitForID(0);
    			if (tracker.isErrorAny()) {
    				System.out.println("Error loading image " + name);
    			}
    		} catch (Exception ex) {
    			ex.printStackTrace();
    		}
    		return img;
    	}
    }
    Glob
    What would you do if you were not afraid?

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

  4. #4
    Membre émérite
    Avatar de Ioan
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 737
    Points : 2 999
    Points
    2 999
    Par défaut
    Bonjour,
    Si tu utilises le package imageio, tu ne devrais plus avoir de problèmes de chargement (plus besoin de MediaTracker, etc.).
    Bonne chance
    @+
    Les FAQs Java, J2EE, JDBC, Struts > Les cours > Le Forum Java.
    Merci de respecter les règles du club.
    Mon blog : quelques news sur Java, Linux et le monde de l'Open Source.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 95
    Points : 140
    Points
    140
    Par défaut
    Une autre solution consiste à créer une ImageIcon, puisque cette classe est bloquante. Par contre, cela nécessite d'utiliser Swing.

  6. #6
    Membre habitué Avatar de al85
    Profil pro
    Inscrit en
    Février 2004
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 158
    Points : 128
    Points
    128
    Par défaut
    ok, merci a tous, j'ai trouve mon bonheur parmis toutes ces solutions.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Python 3.X] Créer une image png à partir d'une image de format quelconque avec Python
    Par bguy4 dans le forum Général Python
    Réponses: 3
    Dernier message: 30/10/2014, 10h49
  2. Afficher une image par défaut lorsque une image ne s'affiche pas
    Par ne2sbeal dans le forum Général Conception Web
    Réponses: 4
    Dernier message: 10/10/2011, 10h42
  3. Charger une image et la passer à une applet
    Par novamax dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 11/10/2010, 15h11
  4. Charger une Image a partir d'une Url
    Par Bily.sdi dans le forum C++Builder
    Réponses: 4
    Dernier message: 22/05/2008, 01h14
  5. charger une image et en faire une copie
    Par casho dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 29/08/2006, 18h29

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