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

Qt Discussion :

Lire et afficher une image en Qt


Sujet :

Qt

  1. #121
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Citation Envoyé par sardik Voir le message
    C'est plus performant par rapport à la façon dont sont agencées les données en mémoire.
    Ok alors si je peux avoir un peu plus d'explication car là si je me trompe pas il lit pas linéairement les données en memoire il fait a chaque fois un saut y*columns.

    Donc si vous pouvez m'expliquer il doit y avoir un truc qui m'echappe ?
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  2. #122
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par superjaja Voir le message
    Ok alors si je peux avoir un peu plus d'explication car là si je me trompe pas il lit pas linéairement les données en memoire il fait a chaque fois un saut y*columns.

    Donc si vous pouvez m'expliquer il doit y avoir un truc qui m'echappe ?
    Ben c'est ce qu'à dit sardik.
    La mémoire n'est pas mis entièrement en cache. Seulement des morceaux.
    Donc si tu accède à des données côte à côte, il n'y as pas besoin de mettre en cache à chaque fois.
    x en premier : les accès successif sont éloigné en mémoire => perte de temps sur le cache

    y en premier :les accès successif sont proche en mémoire => moins de perte de temps

  3. #123
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Oui vous avez tout a fait raison c'est moi c'est vendredi je suis fatigué je regardait en fait ton code dans celui du message de lisco. C'est pour ca que je comprennais pas et que je te disais que a chaque tour de boucle tu faisais un saut de y*columns.
    Desolé les gars heureusement que j'ai trois jours ce week end.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  4. #124
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Points : 131
    Points
    131
    Par défaut
    Y a t-il une classe qui gere les structure en Qt car quand je declare une structure dans le .h de mon projet à la compilation j'ai l'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c:/Qt/2009.01/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/ext/new_allocator.h::-1: error: multiple definition of `fxd'
    Ensuite:

    Citation Envoyé par yan Voir le message
    Le dernier problème est que les valeurs min,max donné en entête sont fausse.
    ?).
    Tu peux m'expliquer pourquoi , parce que je vois pas trop pourquoi il nous donne des valeurs nulles??

    Citation Envoyé par yan Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <QtGui>
     
    	float min =  std::numeric_limits<float>::max();;
    	float max =  - std::numeric_limits<float>::max();
     
     
    }
    Tu peux m'expliquer car je suis debutant , en fait en quoi tu initialise ici tes valeurs min et max??? je suppose bien initialement ces deux variables contiennent bien des valeurs?


    Citation Envoyé par yan Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //simple règle de trois
    unsigned char  pixel = 255 
    		 * 
     (imageBuffer[y*fxd.NbColumns + x] - min) 
    		 / 
    	 (max - min);
    Pour la fameuse regle de 3, si tu peux expliquer aussi suis preneur!Donc les valeurs des pixels etaient bien des float comprises entre 0 et 2^32??

    Citation Envoyé par yan Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        QScrollArea w;
    	{
    		QLabel *label = new QLabel(&w);
    		label->setPixmap(QPixmap::fromImage(img).scaled(800,600,Qt::KeepAspectRatio));
    		w.setWidget(label);
    	}
        w.show();
    J'ai bien teste ton code il marche parfaitement, ma question est que est ce que je doit donc utiliser un QScrollArea pour pouvoir l'afficher corrctement dans mon IHM car j'utilise qu'un QLabel mais l'affichage n'est pas bonne j'ai pas la bonne image??

    Ma derniere question est ce possible d'inverser le fond avec l'image c'est a dire de rendre l'image blanc et le fond noir car le but etant de visualiser l'interieur de la crane??

    Encore merci pour tous ces semaines que vous avez accepter de m'aider!!

  5. #125
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Pour ton erreur de compilation je suppose comme c'est marqué que tu as plusieur fois une variable qui se nomme fxd ?

    L'initialisation des valeur min et max se font ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            for ( int i = 0; i < bufferSize; ++i)
            {
                    float f;
                    in >> f;
                   //Initialisation des valeurs
                    if (f >max) max = f;
                    if (f <min) min = f;
                    imageBuffer[i] =f;
            }
    De meme quand yan dit que tes valeur sont fausse je suppose que se sont celle là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	float MaxSignalLevel;   // maximum value in the image
    	float MinSignalLevel;   // minimum value in the image
    Celle de la structure rempli au debut quand tu lis ton fichier.


    Pour les float je crois que tu as toujours pas compris comment cela marche.
    Les float ne sont pas compris entre 0 et 2^32. Merci de regarder le lien que je t'ai envoyé hier.

    Essaye pour changer le fond de l'image de faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pixel = abs(pixel - 255);//A verifier si cela marche (inclure <cmath> dans le .cpp)
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  6. #126
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Pas besoins de abs() essaye plutot ça :
    Comme quoi je suis vraiment crevé en ce moment.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  7. #127
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Pas besoins de abs() essaye plutot ça :
    Comme quoi je suis vraiment crevé en ce moment.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  8. #128
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    pour compléter les réponses de superjaja

    Tu peux m'expliquer pourquoi , parce que je vois pas trop pourquoi il nous donne des valeurs nulles??

    de quoi tu parle?

    Citation Envoyé par lisco Voir le message
    Tu peux m'expliquer car je suis debutant , en fait en quoi tu initialise ici tes valeurs min et max??? je suppose bien initialement ces deux variables contiennent bien des valeurs?
    min: valeur max que peut prendre un float
    max: -1 * valeur max que peut prendre un float

    Pour la fameuse regle de 3, si tu peux expliquer aussi suis preneur!
    ...

    Donc les valeurs des pixels etaient bien des float comprises entre 0 et 2^32??
    Tu mélange tout. Si tu exécute mon code, tu as juste à les afficher. C'est un truc comme -127.xxx à 4530.xxx

    J'ai bien teste ton code il marche parfaitement, ma question est que est ce que je doit donc utiliser un QScrollArea pour pouvoir l'afficher corrctement dans mon IHM car j'utilise qu'un QLabel mais l'affichage n'est pas bonne j'ai pas la bonne image??
    Le QScrollArea sert uniquement à avoir des scrollbar et à rien d'autre

    Pour là suite, ce n'est plus du Qt, c'est du traitement d'image. Il y as un forum beaucoup plus adapté :
    http://www.developpez.net/forums/f64...ement-dimages/
    Masi un conseil commence par apprendre les bases. Tu trouvera ici beaucoup de cour et tuto :
    http://www.developpez.net/forums/d39...erique-images/
    Je te conseil celui-çi :
    http://raphaello.univ-fcomte.fr/IG/T...mentImages.htm

    bon courage

  9. #129
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Points : 131
    Points
    131
    Par défaut
    Bonjour, merci pour toutes ces conseils et pour le temps que vous avez passez sur mon sujet.Pour clore ce thread je veux generaliser le code à mes differents types d'images:
    Voici les bouts de codes que j'ai fait adapter:


    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
    /*======================================Pour une image Unsigned int===============================================*/
     
            unsigned int bufferSize = fxd.NbColumns * fxd.NbRows;
            quint16 min =  std::numeric_limits<quint16>::max();;
            quint16 max =  - std::numeric_limits<quint16>::max();
            std::vector<quint16> imageBuffer(bufferSize);
            for ( int i = 0; i < bufferSize; ++i)
            {
                    quint16 f;
                    in >> f;
                    if (f > max) max = f;
                    if (f < min) min = f;
                    imageBuffer[i] =f;
            }
     
     
    /*===================================Pour une image Unsigned short==================================================*/
     
            unsigned int bufferSize = fxd.NbColumns * fxd.NbRows;
            unsigned short min =  std::numeric_limits<unsigned short>::max();;
            unsigned short =  - std::numeric_limits<unsigned short>::max();
            std::vector<unsigned short> imageBuffer(bufferSize);
            for ( int i = 0; i < bufferSize; ++i)
            {
                    unsigned short f;
                    in >> f;
                    if (f > max) max = f;
                    if (f < min) min = f;
                    imageBuffer[i] =f;
            }
     
     /*==================================================================================================================*/
    Si cela c'est bon ; je dois peut etre faire des templates ou des switch!!
    Et Yan tu me disais que ya des metodes beaucoup plus adaptées à mes images si tu peux me dire je suis preneur?
    Encore merci.

  10. #130
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Je pense qu'un template serait parfait.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  11. #131
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Attention, situ utilise des type non signé, cette ligne ne veut rien dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned  xxx max = - std::numeric_limits<unsigned xxx>::max();
    Une autre manière est d'initialiser min/max avec la valeur du premier pixel.


    Citation Envoyé par lisco Voir le message
    Si cela c'est bon ; je dois peut etre faire des templates ou des switch!!
    Plutôt template

    Et Yan tu me disais que ya des metodes beaucoup plus adaptées à mes images si tu peux me dire je suis preneur?
    demande de l'aide sur l'autre forum pour ceci. Il existe une infinité de méthode qui permettent de convertir tes valeur entre 0 et 255. Et une tranformation linéaire ne donnera pas souvent le résultat voulue.

    Par exemple, tu est d'accord que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        (imageBuffer[y*columns + x] - min)
          /
         (max - min);
    est compris entre zéro et un. Au lieu de cette valeur, utilise la racine carré ou le carré. Tu obtiendra des résultats différents.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    float tmp =  (imageBuffer[y*columns + x] - min)
          /
         (max - min);
    pixel = 255 *  sqrt(tmp);

  12. #132
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Points : 131
    Points
    131
    Par défaut
    Bonjour, je suis entrain de faire des templates, mais là n'étant pas trop habitué et en suivant les regles j'ai rencontré des beugs dont je comprends pas trop,voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    template<typename T>
            T min = std::numeric_limits<T>::max() ; //Pour trouver le min et le max de l'image.
            T max = -std::numeric_limits<T>::max() ;
     
    template<typename T>
            std::vector<T>& imageBuffer(bufferSize) ;
     
    template<typename T>
            T f ;
    Et voici les beugs que cela m'affiche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    error: template declaration of `T min'
    error: `T' does not name a type
    error: template declaration of `std::vector<T, std::allocator<_CharT> >&imageBuffer'
     
    error: template declaration of `std::vector<T, std::allocator<_CharT> >&imageBuffer'
    Si quelqu'un peut m'aider svp.
    Merci d'avance.

  13. #133
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    La réponse se trouve dans le code que tu as posté.

  14. #134
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Points : 131
    Points
    131
    Par défaut
    Eh Oui, je suis debutant en templates, si je peux avoir plus d'explication je suis preneur

  15. #135
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Points : 131
    Points
    131
    Par défaut
    Citation Envoyé par IrmatDen Voir le message
    La réponse se trouve dans le code[/url] que tu as posté.
    J'arrive pas à trouver le bogue, et la partie que j'essaye de generaliser est:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    float min =  std::numeric_limits<float>::max();
            float max =  - std::numeric_limits<float>::max();
            std::vector<float> imageBuffer(bufferSize);
            for ( int i = 0; i < bufferSize; ++i)
            {
                    float f;
                    in >> f;
                    if (f > max) max = f;
                    if (f < min) min = f;
                    imageBuffer[i] =f;
            }
    Pour que cela puisse marcher pour les differents types de pixels que je peux renconter!!Et ces templates me semblent correctes , je vois pas ce qui m'echappe!!help please!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    template<typename T>
            T min = std::numeric_limits<T>::max() ; //Pour trouver le min et le max de l'image.
            T max = -std::numeric_limits<T>::max() ;
     
    template<typename T>
          std::vector<T> imageBuffer(bufferSize) ;
     
    template<typename T>
            T f ;

  16. #136
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    tu peut montrer le code template que tu as fait?

    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    T min = std::numeric_limits<T>::max() ; 
    T max = -std::numeric_limits<T>::max() ;
    Citation Envoyé par yan
    Attention, si tu utilise des type non signé, cette ligne ne veut rien dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned  xxx max = - std::numeric_limits<unsigned xxx>::max();
    Une autre manière est d'initialiser min/max avec la valeur du premier pixel.

  17. #137
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Points : 131
    Points
    131
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    float min =  std::numeric_limits<float>::max();
            float max =  - std::numeric_limits<float>::max();
    Tu peux revenir sur cette ligne Yan stp car je vois 2 fois la methode max() sur min et max??est ce une erreur? et le signe - pour max??pourquoi
    Si j'ai bien compris là on initialise min à la valeur minimale des pixels et max à la valeur maximale!

  18. #138
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    C'est symétrique, l'opposé de max c'est -max.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  19. #139
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par lisco Voir le message
    Si j'ai bien compris là on initialise min à la valeur minimale des pixels et max à la valeur maximale!
    non c'est l'inverse :
    min : valeur max du pixel
    max : valeur min du pixel
    donc pour les type signé les valeur min et max sont symétrique mais pas pour les type non signé.
    Par exemple unsigned char est compris entre 0 et 255.

    Donc, une autre manière d'initialiser ces valeurs pour la recherche est de les initialiser avec la valeur du premier pixel.

  20. #140
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Oui bien sur moi je parlais pour de float et effectivement pour les valeurs non signées ca ne marche pas. De meme pour un char cela te donnera des valeurs compris entre -128 (min) à 127 (max) alors que ta technique yan va donner si je ne me trompe pas des valeur -127 (min) à 127 (max).

    Sinon pourquoi pas utiliser ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     std::numeric_limits<T>::min();
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

Discussions similaires

  1. Lire et afficher une image
    Par pretyy dans le forum Débuter
    Réponses: 6
    Dernier message: 01/02/2012, 12h22
  2. Lire et afficher une image au format pgm
    Par didi_di dans le forum C++
    Réponses: 4
    Dernier message: 17/12/2009, 15h19
  3. Lire et afficher une image 3D (RGB)
    Par 77Camille dans le forum MATLAB
    Réponses: 1
    Dernier message: 06/06/2007, 12h09
  4. Lire et afficher une image (format TIFF)
    Par nuans dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 30/04/2007, 15h33
  5. [Débutante]Lire et afficher une image IRM sous C++ builder
    Par larimoise dans le forum C++Builder
    Réponses: 13
    Dernier message: 04/12/2006, 08h21

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