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 :

Transformation image couleur en noir et blanc


Sujet :

Qt

  1. #1
    Membre éclairé Avatar de AuraHxC
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 652
    Points : 683
    Points
    683
    Par défaut Transformation image couleur en noir et blanc
    Bonjour/bonsoir tout le monde,

    J'essaie en vain de faire un viewer d'image avec la possibilité de transformer l'image en niveau de gris.
    En gros, mon image devient blanche , je colle mon code source pour que tout le monde voit un peu près le problème.

    imageViewer.h
    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
     
    #ifndef IMAGEVIEWER_H
    #define IMAGEVIEWER_H
     
    #include <iostream.h>
    #include <QMainWindow>
     
    class QAction;
    class QLabel;
    class QMenu;
    class QImage;
    class QColor;
    class QScrollArea;
    class QScrollBar;
     
    using namespace std;
     
    class ImageViewer : public QMainWindow {
        Q_OBJECT
     
       public:
            ImageViewer();
     
            private slots:
            void open();
            void grayScale();
     
       private:
            void createActions();
            void createMenus();
     
            QLabel *imageLabel;
     
            QScrollArea *scrollArea;
     
            QAction *openAct;
            QAction *exitAct;
            QAction *grayScaleAct;
     
            QMenu *fileMenu;
            QMenu *convertMenu;
     
            QImage image;
     
            QString fileName;
    };
    #endif // IMAGEVIEWER_H
    imageViewer.cpp
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    #include <QtGui>
    #include "imageViewer.h"
     
    ImageViewer::ImageViewer() {
        imageLabel = new QLabel;
        imageLabel->setBackgroundRole(QPalette::Base);
        imageLabel->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
        imageLabel->setScaledContents(true);
     
        scrollArea = new QScrollArea;
        scrollArea->setBackgroundRole(QPalette::Dark);
        scrollArea->setWidget(imageLabel);
        setCentralWidget(scrollArea);
     
        createActions();
        createMenus();
     
        setWindowTitle(tr("Image Viewer"));
        resize(500, 400);
    }
     
    void ImageViewer::open() {
            fileName = QFileDialog::getOpenFileName(this, tr("Open File"), QDir::currentPath());
     
            if (!fileName.isEmpty()) {
                QImage image(fileName);
     
                if (image.isNull()) {
                    QMessageBox::information(this, tr("Image Viewer"), tr("Cannot load %1.").arg(fileName));
                    return;
                }
     
                cout << "QImage is null ? \n" << image.isNull() << "\n";
     
                imageLabel->setPixmap(QPixmap::fromImage(image));
                imageLabel->adjustSize();
                grayScaleAct->setEnabled(true);
            }
    }
     
    void ImageViewer::grayScale() {
        cout << "QImage is null ? " << image.isNull() << "\n";
        cout << "Height : " << image.height() << " Width : " << image.width() << "\n";
        for (int y = 0; y < image.height(); y++) {
            for (int x = 0; x < image.width(); x++) {
                cout << "Bonsoir2\n";
                image.setPixel(x,y,image.pixel(x,y));
            }
        }
        imageLabel->setPixmap(QPixmap::fromImage(image));
        imageLabel->adjustSize();
        image.save("~/Desktop/grayscale.jpg");
    }
     
    void ImageViewer::createActions() {
            openAct = new QAction(tr("&Open..."), this);
            openAct->setShortcut(tr("Ctrl+O"));
            connect(openAct, SIGNAL(triggered()), this, SLOT(open()));
     
            exitAct = new QAction(tr("E&xit"), this);
            exitAct->setShortcut(tr("Ctrl+Q"));
            connect(exitAct, SIGNAL(triggered()), this, SLOT(close()));
     
            grayScaleAct = new QAction(tr("&GrayScale Conversion"), this);
            grayScaleAct->setShortcut(tr("Ctrl+G"));
            grayScaleAct->setEnabled(false);
            connect(grayScaleAct, SIGNAL(triggered()), this, SLOT(grayScale()));
    }
     
    void ImageViewer::createMenus() {
            fileMenu = new QMenu(tr("&File"), this);
            fileMenu->addAction(openAct);
            fileMenu->addSeparator();
            fileMenu->addAction(exitAct);
     
            convertMenu = new QMenu(tr("&Convert"), this);
            convertMenu->addAction(grayScaleAct);
     
            menuBar()->addMenu(fileMenu);
            menuBar()->addMenu(convertMenu);
    }
    Donc le code pour la transformation ce fait dans la méthode grayScale, le soucis vient du fait que je n'ai pas accès à la variable image (ce que je ne comprend pas).
    Enfin j'attends vos commentaires, merci d'avance

  2. #2
    Membre régulier Avatar de Attrox
    Profil pro
    Concepteur
    Inscrit en
    Mars 2009
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Concepteur

    Informations forums :
    Inscription : Mars 2009
    Messages : 119
    Points : 112
    Points
    112
    Par défaut
    As tu essayer de passer la variable image en public ou alors de la précéder de this.

  3. #3
    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 AuraHxC Voir le message
    Donc le code pour la transformation ce fait dans la méthode grayScale,
    euh... en quoi ta fonction mdifie l'image. Tu recopie l'image dans l'image sans aucune modif....
    Pourquoi ne pas utiliser convertToFormat
    http://qt.developpez.com/doc/4.6-sna...onverttoformat
    le soucis vient du fait que je n'ai pas accès à la variable image (ce que je ne comprend pas).
    comment cela?

  4. #4
    Membre éclairé Avatar de AuraHxC
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 652
    Points : 683
    Points
    683
    Par défaut
    En fait je voulais plutôt faire et j'ai pas mis la bonne version :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    image.setPixel(x,y,QColor::qGray(image.pixel(x,y)));
    Ou un truc dans le genre et sinon pour ta question sur le fait que j'ai pas accès c'est au niveau de mes cout que j'ai mis pour un debug rapide ça me renvoi 0 pour width et height et VRAI pour isNull()

  5. #5
    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
    dans ce 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
     if (!fileName.isEmpty()) {
                QImage image(fileName);
     
                if (image.isNull()) {
                    QMessageBox::information(this, tr("Image Viewer"), tr("Cannot load %1.").arg(fileName));
                    return;
                }
     
                cout << "QImage is null ? \n" << image.isNull() << "\n";
     
                imageLabel->setPixmap(QPixmap::fromImage(image));
                imageLabel->adjustSize();
                grayScaleAct->setEnabled(true);
            }
    tu créé un QImage temporzire nommé image. Etce n'est pas le même que le membre image

  6. #6
    Membre éclairé Avatar de AuraHxC
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 652
    Points : 683
    Points
    683
    Par défaut
    En fait j'ai dans le .h une déclaration d'une QImage image; donc je pensais que l'appel QImage image(fileName); enregistrait mon image dans cette variable et donc avoir accès partout dans mon .cpp.
    Comme dois-je faire pour avoir accès partout ?

  7. #7
    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 AuraHxC Voir le message
    En fait j'ai dans le .h une déclaration d'une QImage image; donc je pensais que l'appel QImage image(fileName); enregistrait mon image dans cette variable et donc avoir accès partout dans mon .cpp.
    Comme dois-je faire pour avoir accès partout ?
    c'est ce que tu as fait. Faut juste pas redéclarer ta variable locale nommé image

  8. #8
    Membre éclairé Avatar de AuraHxC
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 652
    Points : 683
    Points
    683
    Par défaut
    En fait j'ai du mal a comprendre comment fonctionne cette déclaration de QImage.
    J'ai dans mon .h un champ QImage image; on est d'accord, dans ma méthode je crée mon objet QImage comme ceci : QImage image(fileName);
    Donc qu'est ce que je ne comprends pas exactement ? pourquoi je n'ai pas accès partout dans mon code à l'image ?
    Cela veut dire que lorsque j'utilise le constructeur QImage image(fileName) il n'est pas stocké dans mon champs QImage image qui est dans le .h

    Pour faire plus simple vous pouvez me donner un bout de code qui fonctionne ou m'expliquer, merci d'avance et désolé.

  9. #9
    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
    Quand tu écrit QImage image; dans ta classe cela créé un membre nommé image que tu as accès dans toute les méthodes de la classe.
    Quand tu écrit QImage image; dans une fonction, tu créé un QImage temporaire nommé image.

    Dans ton cas tu fait les deux. La définition de image temporaire prend le dessus par rapport au membre et tu ne manipule pas le image que tu pense dans cette fonction.

    Je te conseil de bien revoir les bases du c++ pour éviter ce type d'erreur.

  10. #10
    Membre éclairé Avatar de AuraHxC
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 652
    Points : 683
    Points
    683
    Par défaut
    J'ai bien compris ce concept pas de soucis mais c'est la syntaxe du constructeur QImage qui m'a mis dedans je crois. J'étais persuadé qu'il prenait mon champ créé dans le .h lorsque j'utilisais le constructeur et pas qu'il me créait une variable locale à la méthode.
    En règle général, je ferais un image = new QImage(fileName) mais il me renvoit une erreur donc je captais pas trop la syntaxe alors que je n'ai pas de soucis particulier avec les autres, tu peux le voir dans le reste du code, je déclare des champs dans mon .h et j'arrive très bien à les manipuler, c'est juste ce QImage qui me trouble.

  11. #11
    Membre éclairé Avatar de AuraHxC
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 652
    Points : 683
    Points
    683
    Par défaut
    Je pense que j'ai fait un truc pas trop mal là enfin au moins ça compile et fonctionne.

    .h
    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
     
    #ifndef IMAGEVIEWER_H
    #define IMAGEVIEWER_H
     
    #include <iostream.h>
    #include <QMainWindow>
     
    class QAction;
    class QLabel;
    class QMenu;
    class QImage;
    class QColor;
    class QScrollArea;
    class QScrollBar;
     
    using namespace std;
     
    class ImageViewer : public QMainWindow {
        Q_OBJECT
     
       public:
            ImageViewer();
     
            private slots:
            void open();
            void grayScale();
     
       private:
            void createActions();
            void createMenus();
     
            QLabel *imageLabel;
     
            QScrollArea *scrollArea;
     
            QAction *openAct;
            QAction *exitAct;
            QAction *grayScaleAct;
     
            QMenu *fileMenu;
            QMenu *convertMenu;
     
    		QImage *image;
     
            QString fileName;
    };
    #endif // IMAGEVIEWER_H
    .cpp
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    #include <QtGui>
    #include "imageViewer.h"
     
    ImageViewer::ImageViewer() {
        imageLabel = new QLabel;
        imageLabel->setBackgroundRole(QPalette::Base);
        imageLabel->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
        imageLabel->setScaledContents(true);
     
        scrollArea = new QScrollArea;
        scrollArea->setBackgroundRole(QPalette::Dark);
        scrollArea->setWidget(imageLabel);
        setCentralWidget(scrollArea);
     
        createActions();
        createMenus();
     
        setWindowTitle(tr("Image Viewer"));
        resize(500, 400);
    }
     
    void ImageViewer::open() {
            fileName = QFileDialog::getOpenFileName(this, tr("Open File"), QDir::currentPath());
     
            if (!fileName.isEmpty()) {
               	image = new QImage(fileName);
     
                if (image->isNull()) {
                    QMessageBox::information(this, tr("Image Viewer"), tr("Cannot load %1.").arg(fileName));
                    return;
                }
     
                cout << "QImage is null ?" << image->isNull() << "\n";
     
                imageLabel->setPixmap(QPixmap::fromImage(*image));
                imageLabel->adjustSize();
                grayScaleAct->setEnabled(true);
            }
    }
     
    void ImageViewer::grayScale() {
        cout << "QImage is null ? " << image->isNull() << "\n";
        cout << "Height : " << image->height() << " Width : " << image->width() << "\n";
        for (int y = 0; y < image->height(); y++) {
            for (int x = 0; x < image->width(); x++) {
                image->setPixel(x,y,(0.299*qRed(image->pixel(x,y)) + 0.587*qGreen(image->pixel(x,y)) + 0.114*qBlue(image->pixel(x,y))));
            }
        }
        imageLabel->setPixmap(QPixmap::fromImage(*image));
        imageLabel->adjustSize();
        //image->save("~/Desktop/grayscale.jpg");
    }
     
    void ImageViewer::createActions() {
            openAct = new QAction(tr("&Open..."), this);
            openAct->setShortcut(tr("Ctrl+O"));
            connect(openAct, SIGNAL(triggered()), this, SLOT(open()));
     
            exitAct = new QAction(tr("E&xit"), this);
            exitAct->setShortcut(tr("Ctrl+Q"));
            connect(exitAct, SIGNAL(triggered()), this, SLOT(close()));
     
            grayScaleAct = new QAction(tr("&GrayScale Conversion"), this);
            grayScaleAct->setShortcut(tr("Ctrl+G"));
            grayScaleAct->setEnabled(false);
            connect(grayScaleAct, SIGNAL(triggered()), this, SLOT(grayScale()));
    }
     
    void ImageViewer::createMenus() {
            fileMenu = new QMenu(tr("&File"), this);
            fileMenu->addAction(openAct);
            fileMenu->addSeparator();
            fileMenu->addAction(exitAct);
     
            convertMenu = new QMenu(tr("&Convert"), this);
            convertMenu->addAction(grayScaleAct);
     
            menuBar()->addMenu(fileMenu);
            menuBar()->addMenu(convertMenu);
    }

  12. #12
    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 pouvais aussi utilisé la fonction load pour ouvir ton image, au lieu de faire un new.
    http://qt.developpez.com/doc/4.5/qimage/#load
    Utiliser un pointeur sur un QImage n'est pas forcement le plus adapter .

  13. #13
    Membre éclairé Avatar de AuraHxC
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 652
    Points : 683
    Points
    683
    Par défaut
    J'en prends note et j'essaierais ce soir avec load merci

  14. #14
    Membre éclairé Avatar de AuraHxC
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 652
    Points : 683
    Points
    683
    Par défaut
    En fait j'ai un petit soucis, quand j'opère ma conversion en niveau de gris mon image devient finalement plutôt en niveau de bleu si je peux dire.

    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
     
    void ImageViewer::grayScale() {
        for (int y = 0; y < image->height(); y++) {
            for (int x = 0; x < image->width(); x++) {
    			uint color = 0.299*qRed(image->pixel(x,y)) + 0.587*qGreen(image->pixel(x,y)) + 0.114*qBlue(image->pixel(x,y));
    			histoGray[color]++;
    			histoRed[qRed(image->pixel(x,y))]++;
    			histoGreen[qGreen(image->pixel(x,y))]++;
    			histoBlue[qBlue(image->pixel(x,y))]++;
                            image->setPixel(x,y,color);
            }
        }
        imageLabel->setPixmap(QPixmap::fromImage(*image));
        imageLabel->adjustSize();
    }
    Voilà le code de ma transformation.

Discussions similaires

  1. Convertir une image couleur en noir et blanc avec partie en couleur
    Par capmalo dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 16/10/2014, 02h38
  2. convertir une image couleur en noir et blanc en java
    Par hadjila20 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 02/11/2012, 03h32
  3. Rendre une image couleur en noir et blanc en utilisant AForge
    Par angifilmes dans le forum Windows Forms
    Réponses: 1
    Dernier message: 26/01/2011, 10h45
  4. Couleur ou noir et blanc ?
    Par MajorDOOM dans le forum Traitement d'images
    Réponses: 3
    Dernier message: 29/09/2010, 12h59

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