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

Flex Discussion :

Image embed avec @Embed


Sujet :

Flex

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de yuukuari
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 65
    Par défaut Image embed avec @Embed
    Bonjour,
    Je charge des images dans mon application flex avec cette commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <mx:Image source="@Embed('../resources/fs.png')" />
    Tout fonctionne bien. Cependant je charge beaucoup d'images et plutôt que d'avoir à recopier à chaque fois le chemin de l'image, je voudrais créer une constante avec le path des ressources:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private const RESOURCES:String = "../resources/";
    [..]
    <mx:Image source="@Embed({RESOURCES}+'fs.png')"/>
    Ça parait tout bête mais j'arrive pas à charger ma ressource de cette manière.. il trouve pas l'image. J'ai essayé de mettre "@Embed({RESOURCES+'fs.png'})", "@Embed({RESOURCES}'fs.png')", etc... mais je trouve pas comment faire et j'ai rien trouvé sur le net ..

    Ça m'étonnerait que tout le monde fasse à chaque fois un copier/coller du path! Donc si quelqu'un sait comment faire je veux bien savoir ^^

    Merci

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 895
    Par défaut
    Bonjour,

    Je n'ai jamais essayé de tester le databinding mais je pense pas qu'il soit possible de le faire car il s'agit de Tag MetaData.

    Un autre solution serait de déclarer une classe Assets où tu mets tous tes images à l'intérieur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public final class Assets {
    [Embed(source="MonImage.png")]
    [Bindable]
    public static const var MON_IMAGE:Class;
     
    /**
    * Constructor
    */
    public function Assets()
    {
    }
    }
    Ainsi tu pourras l'utiliser un peu partout :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <mx:Image source="{Assets.MON_IMAGE}" />
    En espérant que cela pourra t'aider

    ++

  3. #3
    Membre confirmé Avatar de arnaud.tlse
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 115
    Par défaut
    Salut !

    Premièrement, et je ne sais pas si c'est une contrainte liée à ton projet, je pense que si tu as un bon nombre d'images à afficher (et à fortiori si elles sont grosses), il serait plus intéressant justement de ne pas les embarquer.
    Afin d'avoir un swf plus léger et de n'appeler les images qu'au moment précis où tu en as besoin.
    La taille du swf va diminuer de manière significative et le premier chargement sera plus rapide.

    Si cette solution est envisageable, tu pourrais alors déclarer ta variable RESOURCES de la même manière, et déclarer tes images plutôt de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <mx:Image id="fs" creationComplete="init(event);" />
    Et par la suite créer une fonction qui ferait à peu prés ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function init(ev:Event):void
    {
        var img:Bitmap = ev.target.content as Bitmap;
        img.source=RESOURCES+img.id+"png" ;
    }
    Enfin je sais pas trop, c'est qu'un idée

    EDIT : Ou un code dans le genre, je suis au boulot là, et sans FlexBuilder pour l'auto-complétion moi je suis perdu

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    793
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2009
    Messages : 793
    Par défaut
    D'accord avec Arnaud sur les conséquences de l'intégration des images dans le swf.

    Sinon à mon avis tu y étais presque. En effet tu peux créer un fichier de "resources" (fichiers .properties) et ensuite insérer ces ressources avec le mot clef @Resource.

  5. #5
    Membre confirmé Avatar de yuukuari
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 65
    Par défaut
    Bonjour et désolé pour le retard de ma réponse, je ne pensais pas que ce serait si rapide

    Citation Envoyé par ellene Voir le message
    Bonjour,

    Je n'ai jamais essayé de tester le databinding mais je pense pas qu'il soit possible de le faire car il s'agit de Tag MetaData.

    Un autre solution serait de déclarer une classe Assets où tu mets tous tes images à l'intérieur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public final class Assets {
    [Embed(source="MonImage.png")]
    [Bindable]
    public static const var MON_IMAGE:Class;
     
    /**
    * Constructor
    */
    public function Assets()
    {
    }
    }
    Ainsi tu pourras l'utiliser un peu partout :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <mx:Image source="{Assets.MON_IMAGE}" />
    En espérant que cela pourra t'aider

    ++
    En effet je ne vois nul part de databinding et ça n'a pas l'air possible :/
    Je n'ai pas très bien compris ce que tu me conseillais de faire avec ta classe Assets. Je charge toutes les images dont j'ai besoin dans cette classe à l'init de mon application et je les utilise dans chaque composant ? en faisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <mx:Image id="image1" source="Assets.IMAGE_1" />
    <mx:Image id="image2" source="Assets.IMAGE_2" />
    etc...
    Citation Envoyé par arnaud.tlse Voir le message
    Salut !

    Premièrement, et je ne sais pas si c'est une contrainte liée à ton projet, je pense que si tu as un bon nombre d'images à afficher (et à fortiori si elles sont grosses), il serait plus intéressant justement de ne pas les embarquer.
    Afin d'avoir un swf plus léger et de n'appeler les images qu'au moment précis où tu en as besoin.
    La taille du swf va diminuer de manière significative et le premier chargement sera plus rapide.

    Si cette solution est envisageable, tu pourrais alors déclarer ta variable RESOURCES de la même manière, et déclarer tes images plutôt de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <mx:Image id="fs" creationComplete="init(event);" />
    Et par la suite créer une fonction qui ferait à peu prés ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function init(ev:Event):void
    {
        var img:Bitmap = ev.target.content as Bitmap;
        img.source=RESOURCES+img.id+"png" ;
    }
    Enfin je sais pas trop, c'est qu'un idée

    EDIT : Ou un code dans le genre, je suis au boulot là, et sans FlexBuilder pour l'auto-complétion moi je suis perdu
    Les images que je souhaite intégrer dans mon swf font 126Ko (une soixantaine) au total et les 2 polices d'écritures 120Ko, tu crois que ça ait une importance significative sur le chargement du swf?
    C'est vrai que certaines images ne sont pas nécessaires suivant le cas d'utilisation .. (qui change suivant la taille du swf embarqué).
    Cependant j'ai peur que trop d'aller-retours sur le serveur pour demander ces petites icônes n'entraine des problèmes .. en plus j'ai déjà eu qq problèmes de sécurité d'accès aux images :/ lorsque le swf est embarqué sur un autre site qui veut accéder à mon serveur.

    En tout cas en ce qui concerne ton code, ça m'a l'air très bien cette méthode
    Il suffit donc d'avoir l'id du composant égale au nom du fichier (ce qui est déjà plus ou moins le cas en fait).
    Je vais essayer de voir de ce côté-là et aussi peut-être limiter le nombre d'images à intégrer au swf.. (qui fait 570Ko pour l'instant).

    Citation Envoyé par jylaxx Voir le message
    D'accord avec Arnaud sur les conséquences de l'intégration des images dans le swf.

    Sinon à mon avis tu y étais presque. En effet tu peux créer un fichier de "resources" (fichiers .properties) et ensuite insérer ces ressources avec le mot clef @Resource.
    Tu veux dire créer un fichier de resources dans mon projet Flex? Du coup je n'aurais pas besoin d'avoir un "path" et un simple @Resource suffirait? Je vais aussi jeter un oeil à ça :p, si jamais je décide de toujours intégrer les images au swf!

    Merci beaucoup de vos réponses ^^

  6. #6
    Membre chevronné Avatar de titouille
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    353
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 353
    Par défaut
    Si tu veux éviter les allers-retours au serveur pour charger des images, tu peux aussi embarquer tes images dans un swf que tu compile séparément (une librairie partagée, en quelque sorte), et ensuite le charger dynamiquement pour avoir accès aux images. Ton swf principal sera plus léger, et tu fais une petite phase de chargement avec barre de progression pour faire joli

  7. #7
    Membre confirmé Avatar de yuukuari
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 65
    Par défaut
    Et bien décidément tu en as des idées intéressantes Titouille !

    Lorsque le widget de lecture s'affichait, je lançais le chargement d'un fichier xml pendant lequel un composant du genre "Sablier" tournait.

    A la suite du chargement du xml, je peux charger l'autre swf contenant les images. Le "Sablier" tournera plus longtemps, mais comme le swf principal s'affiche plus vite, ça reviendra au même

    C'est une solution un peu intermédiaire aux autres. Le swf est moins lourd comme le proposait Arnaud et je peux charger les images comme me l'a conseillé Ellene ou Jylaxx ^^

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

Discussions similaires

  1. [1.x] Problème de sauvegarde des données avec embed form
    Par Vicrabb dans le forum Symfony
    Réponses: 2
    Dernier message: 24/11/2010, 12h11
  2. [1.x] Deux formulaires en un avec embed
    Par blasil64 dans le forum Symfony
    Réponses: 1
    Dernier message: 22/01/2010, 12h38
  3. Réponses: 6
    Dernier message: 15/11/2007, 12h31
  4. problème avec <embed>
    Par r0d dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 27/02/2006, 10h00
  5. Charger et afficher une image jpg avec les mfc
    Par glop - pas glop dans le forum MFC
    Réponses: 3
    Dernier message: 11/02/2004, 18h59

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