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

Flash Discussion :

Obtenir la taille d'une image chargée


Sujet :

Flash

  1. #1
    Invité
    Invité(e)
    Par défaut Obtenir la taille d'une image chargée
    Bonjour,
    Après avoir parcouru ce forum, eu des faux-espoirs, j'en appelle à vous !
    Je souhaite obtenir la taille en pixel d'un Jpeg que je charge, mais malgré toutes mes tentatives et tous les indices trouvés sur ce forum, rien ne marche !

    Voilà, ma version est Flash MX version 6.0
    J'ai essayé un code que je retrouve partout mais ça ne marche pas...
    voici la structure du code :

    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
     
    // je charge mon image dans le clip vide mc
    _root.mc.loadMovie("IMG_4169.JPG"); 
     
    // verifie le chargement
    _root.onEnterFrame = function() {
    total = this.getBytesTotal() ; // taille de l'animation en byte
    lu = this.getBytesLoaded() ; // l'état courant de chargement d'animation en byte
    rapport = lu/total ; 
    if (rapport >= 1) {
     
    // je contrôle largeur et longueur (mais ça ne marche pas, ça affiche 0 !!!
    trace(_root.mc._width) ; trace(_root.mc._height) ;
     
    //on supprime l'évènement onEnterFrame
    delete this.onEnterFrame;
    }
    }
    J'ai aussi essayé une version plus évoluée, qui m'intéresse tout paticulièrement (car c'est pour charger dans des clip-boutons qui sont des vignettes de photos) :

    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
     
    MovieClip.prototype.load = function(url)
    {
      this.loadMovie(url);
      this.onEnterFrame = function()
      {
        if (this.getBytesLoaded() == this.getBytesTotal())
        {
    		trace("100%") ;
          	//on supprime ce onEnterFrame
          	delete this.onEnterFrame;
        }
      }
    } 
     
    newclip.createEmptyMovieClip("mc", 1); 
       newclip.load("IMG_4169.JPG"); 
       largeur = newclip._width ;
       hauteur = newclip._height ;
       trace(largeur) ;trace(hauteur) ; // et là, toujours les valeurs 0 !!!
    Merci infiniment si quelqu'un voit la faille et peut m'éclairer !!!

    bonne fin de journée / bon week-end
    (je reste connecté en permanence, cela dit !)

  2. #2
    Rédacteur

    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    435
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 435
    Points : 1 354
    Points
    1 354
    Par défaut
    Cela vient du fait que tu essaie de trouver les valeurs de _height et _width de ton clip, alors qu'il n'est apparement pas existent, et dsu plus le préload n'est pas terminé lorsque tu definit largeur/heuteur, donc elles sont faussées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    newclip.createEmptyMovieClip("mc", 1);
    déja il me semble qu'ici tu te soi trompé, et que ce soit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.createEmptyMovieClip("newclip", 1);
    ensuite pour le chargement, il faut que tu accede aux propriétés _width et _heigth uniquement lorsque :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (this.getBytesLoaded() == this.getBytesTotal())
        {
    		trace("100%") ;
          	//on supprime ce onEnterFrame
          	delete this.onEnterFrame;
        }
    voila

    et fait attention de ne pas de tromper dans les chemins ensuite !

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci de m'avoir répondu, pyrrha.
    Je suis en train de suivre tes indications. Pas évident, je me mélange les pinceaux !
    Dès que j'ai réussi (ou bien si je n'y arrive pas...), je te tiens au courant !

    Merci encore !

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bien, je n'y arrive pas, il y a des trucs qui m'échappent...

    Voici le code sur lequel j'ai planché, en ayant pris soin de comparer tout ce que j'ai pû voir sur ce forum concernant ce problème :

    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
    MovieClip.prototype.load = function(url) {
    	this.loadMovie(url);
    	this.onEnterFrame = function() {
    		if (this.getBytesLoaded() == this.getBytesTotal()) {
     
    			largeur = this._width ;
    			hauteur = this._height ;
    			trace(largeur) ; trace(hauteur) ;
     
    			delete this.onEnterFrame;
    		}
    	}
    } 
     
    clip = this.createEmptyMovieClip("_mc", 5); 
     
    clip.load("IMG_4169.JPG");
    Alors... mes commentaires/questions :
    - ici je crée un clip vide intitulé "clip" ; ma fonction va faire le travail, mais le fameux "this" concerne quel objet en fait ? il s'agira ici de "clip" ?
    - et le "_mc" créé dans le EmptyMovieclip, à quoi sert-il ici ? est-ce que mon image chargée se charge à la place de "_mc" dans son parent "clip" ? ou bien pas du tout, mais l'image est quand même dans "clip", à côté de "_mc resté vide ?
    - j'ai essayé de placer les lignes de récupération des width et height un peu partout et toujours ces fichues valeurs 0 !!!
    - j'ai aussi essayé de placer ces récupérations dans des images-clés plus loin, et ça marche, mais sur la seule et unique image-clé de mon script ça ne marche pas. C'est peut-être un indice pour qui saura trouver une idée...
    - En fait, le principe de "onEnterFrame = function" est bien de réaliser son opération intégralement sans que rien de ce qui est inscrit par la suite ne se réalise ? c'est ça ?

    Bref, je suis perdu... Et je rage parceque ceux qui ont eu cette problématique ont trouvé la solution, mais quand j'essaie leur script, rien ne marche ! Il n'y aurait pas un truc dans les préférences ? une question de compatibilité de langage entre les version de Flash ? j'ai bien fait attention à bien enlever les typages de variables, par exemple !

    Bon, souhaitant qu'un éclair vous vienne à l'esprit pour m'éclairer, je vous souhaite de réussir tous vos scripts ! (et une bonne nuit, il est temps)

    Merci de m'avoir lu )

  5. #5
    Membre émérite
    Avatar de jean philippe
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 062
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 062
    Points : 2 313
    Points
    2 313
    Par défaut
    salut
    je ferai plutot un truc comme ceci :
    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
    loder = function (img, url) {
    	img.loadMovie(url);
    	this.onEnterFrame = function() {
    		if (img.getBytesTotal()>0) {
    			img.onEnterFrame = function() {
    				if (this.getBytesLoaded() == this.getBytesTotal()) {
    					trace(this._width);
    					trace(this._height);
    					delete this.onEnterFrame;
    				}
    			};
    			delete this.onEnterFrame;
    		}
    	};
    };
    //utilisation
    this.createEmptyMovieClip("imgo", 1);
    loder(imgo, "IMG_4169.jpg");
    this.createEmptyMovieClip("imgu",10);
    loder(imgu, "zz.jpg");

  6. #6
    Invité
    Invité(e)
    Par défaut
    Merci pour ta réponse Jean-Philippe,
    Je n'ai pas encore essayé ; mais ça m'a l'air intéressant.
    J'y reviendrai un peu plus tard, je suis passé à autre chose, histoire d'avancer...
    Merci encore !

  7. #7
    Membre émérite
    Avatar de jean philippe
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 062
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 062
    Points : 2 313
    Points
    2 313
    Par défaut
    ouep c 'est ça passe a autre chose et reviens nous voir bien vite

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    moi j'ai le meme problème et ce qui est bizarre c'est que j'ai essayer meme d'afficher, getBytesLoaded() et getBytesTotal(), et ça m'affiche 0, ce qui est aussi étrange c'est que je crée mon clip, je charge l'image, ensuite je modifie les valeurs de _x et _y , la pas de probleme et ensuite pour _height, si je l'affiche j'ai toujours cette valeur 0 alors qu'à priori si j'ai accés à _x et _y je devrais avoir aussi accés à _height

    Explication :

    Je souhaite afficher une gallerie d'images précise en fonction de la page, donc j'ai fait une fonction qui prend en param "page 1" "page 2" etc. A savoir que j'ai chargé au préalable le xml en question.

    Voici le XML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <gallerie>
    	<page nb="1">
    		<desc nom="1.jpg" pos="15" size="80" />
    		<desc nom="3.jpg" pos="205" size="80" />
    		<desc nom="1.jpg" pos="300" size="80" />
    		<desc nom="1.jpg" pos="585" size="80" />
    	</page>
    	<page nb="2">
    		<desc nom="2.jpg" pos="110" size="80" />
    		<desc nom="2.jpg" pos="160" size="80" />
    		<desc nom="3.jpg" pos="490" size="80" />
    	</page>
    </gallerie>
    Voici mon code :

    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
     
    _global.Getpics = function (page)
    {
    	nbr = page.substr(5);
    	//page est sous forme "page x" donc je récupère que le x
     
    	nb = Number (nbr);
    	// et je le converti en nombre
     
    	pics = PicsXml.firstChild.childNodes[nb-1];
    	// je récupère les infos concernant les images a charger en fonction de la page
     
    	for(i=0; i<pics.childNodes.length; i++ ) // et je les charges
    	{
    		nom = pics.childNodes[i].attributes.nom;
    		_root.content.window.createEmptyMovieClip("img"+i,i+10);
    		_root.content.window["img"+i].loadMovie(nom);
    	}
     
    	do //puis je vérifie que tout soit bien chargé
    	{
    		//ici deja pb si je fais un trace(_root.content.window["img"+i].getBytesTotal());  j'obtiens 0 à chaque fois 
    		this.loaded = true;
    		for(i=0; i<pics.childNodes.length; i++)
    		{
    			if( _root.content.window["img"+i].getBytesLoaded() != _root.content.window["img"+i].getBytesTotal() )
    			{
     
    				this.loaded=false;
    			}
    		}
    	}while( this.loaded == false )
     
     
     
    	for(i=0; i<pics.childNodes.length; i++)// ici pas de problèmes ???
    	{
    		_root.content.window["img"+i]._x = 0;
    		_root.content.window["img"+i]._y = Number(pics.childNodes[i].attributes.pos);
    	}
     
    	for(i=0; i<pics.childNodes.length; i++) // ensuite je les redimensionnes du moins j'essaie
    	{
    		// ici si je met un trace(_root.content.window["img"+i]._height), j'obtiens 0 aussi
    		_root.facteur = _root.content.window["img"+i]._height / pics.childNodes[i].attributes.size;
    		if(_root.facteur == 0)// pour éviter un div by 0
    		{
    			_root.facteur = 1;
    		}
    		_root.content.window["img"+i]._xscale = _root.content.window["img"+i]._yscale /= _root.facteur;
    	}
     
    }
    PS : j'ai meme essayer pour voir d'affecter une valeur différente de 0 a _height, et ensuite de l'afficher et la pan !!! toujours 0.
    Je ne vois vraiment pas la solution.

    PS² : j'utilise flash MX 2004, ça peut peut etre avoir son importance

  9. #9
    Membre émérite
    Avatar de jean philippe
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 062
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 062
    Points : 2 313
    Points
    2 313
    Par défaut
    utilise la classe MovieClipLoader et ses méthodes

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    ok merci j'vais essayer.

Discussions similaires

  1. Comment connaître la Taille d'une image chargée dans mx.controls.Loader ?
    Par Mister Paul dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 31/12/2010, 00h01
  2. recupérer taille et placer d'une image chargé depuis un loader
    Par Sumoner dans le forum ActionScript 3
    Réponses: 2
    Dernier message: 06/05/2009, 11h14
  3. Changer la taille d'une image chargée avec Loader
    Par DeezerD dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 29/01/2008, 17h55
  4. effacer une image chargée ds TBitmap
    Par sony351 dans le forum C++Builder
    Réponses: 4
    Dernier message: 20/09/2004, 10h28
  5. [FLASH MX] taille d'une image
    Par matN59 dans le forum Flash
    Réponses: 2
    Dernier message: 10/06/2004, 10h51

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