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

Windows Forms Discussion :

Sauvegarder l'image d'un picturebox avec les superpositions! [Débutant]


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 102
    Points : 41
    Points
    41
    Par défaut Sauvegarder l'image d'un picturebox avec les superpositions!
    Bonjours!
    Voilà, je créer un programme , qui permet de modifier une image, il y a plusieurs superposition sur l'image!
    Voici mon code en entier:
    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
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Drawing.Imaging;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
     
    namespace ImageSuperposer
    {
        public partial class Form1 : Form
        {
            private Bitmap Corps; 
            private Bitmap Tête = ImageSuperposer.Properties.Resources.tête1;
            private Bitmap Vetement = ImageSuperposer.Properties.Resources.vetement1;
     
            private Bitmap CorpsKaduki = ImageSuperposer.Properties.Resources.corp1_pos1;
            private Bitmap TêteKaduki = ImageSuperposer.Properties.Resources.tête1_pose1;
     
            public Form1()
            {
                InitializeComponent();
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
     
                this.pictureBox1.CreateGraphics().DrawImage(Tête, 0, 0);
                this.pictureBox1.CreateGraphics().DrawImage(Vetement, 0, 0);
     
                this.pictureBox2.CreateGraphics().DrawImage(CorpsKaduki, 0, 0);
                this.pictureBox2.CreateGraphics().DrawImage(TêteKaduki, 0, 0);
            }
     
            private void button2_Click(object sender, EventArgs e)
            {
                this.pictureBox1.Refresh();
                this.Vetement = ImageSuperposer.Properties.Resources.vide;
                this.pictureBox1.CreateGraphics().DrawImage(Vetement, 0, 0);
                this.button1.PerformClick();
            }
     
            private void button3_Click(object sender, EventArgs e)
            {
                this.pictureBox1.CreateGraphics().DrawImage(Tête, 0, 0);
                this.pictureBox1.CreateGraphics().DrawImage(Corps, 0, 0);
                this.pictureBox1.CreateGraphics().DrawImage(Vetement, 0, 0);
     
                this.pictureBox2.CreateGraphics().DrawImage(CorpsKaduki, 0, 0);
                this.pictureBox2.CreateGraphics().DrawImage(TêteKaduki, 0, 0);
            }
     
            private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (comboBox1.SelectedIndex == 0)
                {
                    this.Corps = ImageSuperposer.Properties.Resources.corp1; 
                }
            }
     
            private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (comboBox2.SelectedIndex == 0)
                {
                    this.Tête = ImageSuperposer.Properties.Resources.tête1;
                }
            }
     
            private void button4_Click(object sender, EventArgs e)
            {
                Bitmap bmp = new Bitmap(pictureBox1.ClientSize.Width, pictureBox1.ClientSize.Height);
                pictureBox1.DrawToBitmap(bmp, pictureBox1.ClientRectangle);
                bmp.Save(@"picturebox.png", System.Drawing.Imaging.ImageFormat.Png);
            }
        }
    }
    Le seul problème, il m'enregistre pas bien la picturebox, mais si on met une image avec le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.pictureBox1.Image = ImageSuperposer.Properties.Resources.tête1;
    Mais il prend pas ceux superposer sur la picturebox!

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Normal : tu ne dessines pas sur l'image, mais sur le contrôle, donc ça disparait aussitôt que le contrôle n'est plus visible.

    Il faut dessiner sur l'image elle-même. Le plus simple, c'est d'affecter à la PictureBox une image vide de la taille voulue (new Bitmap(largeur, hauteur)), et ensuite de dessiner sur cette image. Par exemple :

    this.pictureBox1.CreateGraphics().DrawImage(Tête, 0, 0);

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    using (var g = Graphics.FromImage(pictureBox1.Image))
    {
        g.DrawImage(Tête, 0, 0)
    }
    D'autre part, utiliser CreateGraphics comme tu le fais est une très mauvaise idée : tu crées plein de handles HDC (device context) qui ne seront libérés que quand le garbage collector passera par là. Quand tu crées un Graphics, il faut le libérer dès que tu n'en as plus besoin (le plus simple est de le faire avec un bloc using, comme dans mon exemple). De plus, si tu dois dessiner plusieurs images d'affilée, réutilise le même Graphics plutôt que d'en créer un nouveau à chaque fois.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 102
    Points : 41
    Points
    41
    Par défaut
    Merci de ta réponse!
    Erreur, la valeur ne peux pas être nul!
    L'erreur vient de ton code!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            private void radioButton2_CheckedChanged(object sender, EventArgs e)
            {
                this.Corps = Image.FromFile(@"Character\Homme\Normal\Corps\corp1.png");
                this.Tête = Image.FromFile(@"Character\Homme\Normal\Tête\tête1.png");
                using (var g = Graphics.FromImage(pictureBox4.Image))
                {
                    g.DrawImage(Tête, 0, 0);
                }
                this.pictureBox1.Refresh();
                this.pictureBox1.CreateGraphics().DrawImage(Corps, 0, 0);
                this.pictureBox1.CreateGraphics().DrawImage(Tête, 0, 0);
            }
    EDIT: Une question, quand je récupérer une image avec ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                if (File.Exists("IconSet.png"))
                {
                    this.pictureBox1.Image = new Bitmap("IconSet.png");
                    this.pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;
                    this.pictureBox1.Width = 384;
                    this.pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;
                }
    L'image devient flou quand je clique dessus, et j'aimerais savoir comment le redimensionner la picturebox en la taille de l'image!

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par iVarlix Voir le message
    Merci de ta réponse!
    Erreur, la valeur ne peux pas être nul!
    L'erreur vient de ton code!
    Sur quelle ligne l'erreur se produit ? Tu as bien initialisé pictureBox1.Image comme j'ai dit ?

    Citation Envoyé par iVarlix Voir le message
    L'image devient flou quand je clique dessus, et j'aimerais savoir comment le redimensionner la picturebox en la taille de l'image!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pictureBox1.Size = new Size(pictureBox1.Image.Width, pictureBox1.Image.Height)
    Et ne met pas AutoSize

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 102
    Points : 41
    Points
    41
    Par défaut
    Merci!
    Donc voilà le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            private void radioButton2_CheckedChanged(object sender, EventArgs e)
            {
                this.pictureBox1.Image = new Bitmap(97, 133);
                this.Tête = Image.FromFile(@"Character\Homme\Normal\Tête\tête1.png");
                using (var g = Graphics.FromImage(pictureBox1.Image))
                {
                    g.DrawImage(Tête, 0, 0);
                }
            }
    Si je réduit la fenêtre, et que je l'ouvre, l'image réapparaît bien!
    Merci infiniment!

    De plus, si tu dois dessiner plusieurs images d'affilée, réutilise le même Graphics plutôt que d'en créer un nouveau à chaque fois.
    Comment ça?
    Tu veux dire que je doit garder le Graphics Tête, pour tout?

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par iVarlix Voir le message
    Comment ça?
    Tu veux dire que je doit garder le Graphics Tête, pour tout?
    Je veux dire qu'au lieu de faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                this.pictureBox1.CreateGraphics().DrawImage(Corps, 0, 0);
                this.pictureBox1.CreateGraphics().DrawImage(Tête, 0, 0);
    Il faut faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        using (var g = Graphics.FromImage(pictureBox1.Image))
        {
            g.DrawImage(Corps, 0, 0);
            g.DrawImage(Tête, 0, 0);
        }

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 102
    Points : 41
    Points
    41
    Par défaut
    Merci beaucoup!
    Voilà 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
    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
     
    namespace VXAceCharaGénérator
    {
        public partial class Form1 : Form
        {
            private string Img;
            private Image Corps;
            private Image Tête;
     
            public Form1()
            {
                InitializeComponent();
                this.radioButton1.Checked = true;
                string dirPath = @"Character\Homme\Normal\Corps";
                string dirPath1 = @"Character\Homme\Normal\Tête";
                string[] extensions = new[] { ".jpg", ".tiff", ".bmp", ".png" };
     
                DirectoryInfo dInfo = new DirectoryInfo(dirPath);
                FileInfo[] files = dInfo.GetFiles()
                         .Where(f => extensions.Contains(f.Extension.ToLower()))
                         .ToArray();
     
                foreach (var file in files)
                    listBox1.Items.Add(file.Name);
     
                DirectoryInfo dInfo1 = new DirectoryInfo(dirPath1);
                FileInfo[] files1 = dInfo1.GetFiles()
                         .Where(f => extensions.Contains(f.Extension.ToLower()))
                         .ToArray();
     
                foreach (var file1 in files1)
                    listBox2.Items.Add(file1.Name);
            }
     
            private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                this.pictureBox2.Refresh();
                this.pictureBox2.Image = new Bitmap(97, 133);
                this.Corps = Image.FromFile(@"Character\Homme\Normal\Corps\" + this.listBox1.SelectedItem.ToString());
                using (var g = Graphics.FromImage(pictureBox2.Image))
                {
                    g.DrawImage(Corps, 0, 0);
                }
            }
     
            private void radioButton1_CheckedChanged(object sender, EventArgs e)
            {
                this.pictureBox1.Refresh();
                this.pictureBox1.Image = new Bitmap(97, 133);
                this.Corps = Image.FromFile(@"Character\Homme\Normal\Corps\corp1.png");
                this.Tête = Image.FromFile(@"Character\Homme\Normal\Tête\tête1.png");
                using (var g = Graphics.FromImage(pictureBox1.Image))
                {
                    g.DrawImage(Corps, 0, 0);
                    g.DrawImage(Tête, 0, 0);
                }
            }
     
            private void radioButton2_CheckedChanged(object sender, EventArgs e)
            {
                this.pictureBox1.Image = new Bitmap(97, 133);
                this.Tête = Image.FromFile(@"Character\Homme\Normal\Tête\tête1.png");
                using (var g = Graphics.FromImage(pictureBox1.Image))
                {
                    g.DrawImage(Tête, 0, 0);
                }
            }
     
            private void toolStripButton1_Click(object sender, EventArgs e)
            {
                this.pictureBox1.Refresh();
                this.pictureBox1.Image = new Bitmap(97, 133);
                this.Tête = Image.FromFile(@"Character\Homme\Normal\Tête\" + this.listBox2.SelectedItem.ToString());
                this.Corps = Image.FromFile(@"Character\Homme\Normal\Corps\" + this.listBox1.SelectedItem.ToString());
                using (var g = Graphics.FromImage(pictureBox1.Image))
                {
                    g.DrawImage(Corps, 0, 0);
                    g.DrawImage(Tête, 0, 0);
                }
            }
     
            private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
            {
                this.pictureBox3.Refresh();
                this.pictureBox3.Image = new Bitmap(97, 133);
                this.Tête = Image.FromFile(@"Character\Homme\Normal\Tête\" + this.listBox2.SelectedItem.ToString());
                using (var g = Graphics.FromImage(pictureBox3.Image))
                {
                    g.DrawImage(Tête, 0, 0);
                }
            }
        }
    }
    Est-ce bien comme ça?

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par iVarlix Voir le message
    Est-ce bien comme ça?
    Bah y a encore pas mal de petites améliorations possible, mais c'est mieux
    Tu devrais donner de vrais noms à tes contrôles, sinon tu n'arriveras plus à t'y retrouver quand ton projet va grossir...

  9. #9
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 102
    Points : 41
    Points
    41
    Par défaut
    Tu parle les contrôles Tête, Corps, etc... ?
    Dit moi ce que je peux améliorer dans le code, et petite problème encore, j'ai un logiciel que j'ai créer, mais quand il ce lance y met un bon petit 5 seconde pour ce lancer!
    Est-ce que sa vient des images dans les groupBoxs? Où de ce code de la form1 quand il ce lance?
    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
            public Form1()
            {
                InitializeComponent();
                if (File.Exists("IconSet.png"))
                    this.pictureBox3.Image = new Bitmap("IconSet.png");
                this.img = new Bitmap(this.pictureBox3.Image);
                this.listBox1.Items.Add((object)"Quête: 0");
                this.quests[0] = new Quest("Quête: 0");
                this.page = this.tabPage1;
                this.listBox1.Select();
                this.listBox1.SelectedIndex = 0;
                this.imageList1.TransparentColor = this.img.GetPixel(0, 0);
                this.imageList1.Images.Clear();
                for (int index1 = 0; index1 < this.img.Height / 24; ++index1)
                {
                    for (int index2 = 0; index2 < this.img.Width / 24; ++index2)
                    {
                        Bitmap bitmap = new Bitmap(24, 24);
                        Graphics.FromImage((Image)bitmap).DrawImage((Image)this.img, new Rectangle(0, 0, 24, 24), new Rectangle(index2 * 24, index1 * 24, 24, 24), GraphicsUnit.Pixel);
                        this.imageList1.Images.Add((Image)bitmap);
                    }
                }
            }
    EDIT: Ce code vient dans un autre logiciel, il met 5 seconde pour ce lancer! --'

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par iVarlix Voir le message
    Tu parle les contrôles Tête, Corps, etc... ?
    Non, ça c'est des images, pas des contrôles... et elles ont des noms parlants, donc pas de problème. Je parle des "Form1", "radioButton1", "pictureBox2", etc.

    Citation Envoyé par iVarlix Voir le message
    petite problème encore, j'ai un logiciel que j'ai créer, mais quand il ce lance y met un bon petit 5 seconde pour ce lancer!
    Bah c'est pas très étonnant, il génère plein d'images... Quelle taille fait IconSet.png ?

  11. #11
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 102
    Points : 41
    Points
    41
    Par défaut
    Sa dépend, les gens peuvent avoir dans différent dimensions!
    Mais là, sa m'affiche au bout de 1~2 seconde depuis que j'ai mis ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                if (File.Exists("IconSet.png"))
                    this.pictureBox3.Image = new Bitmap("IconSet.png");
    Avant c'était une image de 384; 16034! (largeur,hauteur)

    EDIT: Il y a pas moyen d'optimiser, pour les personne qui met une image très grande?

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par iVarlix Voir le message
    Avant c'était une image de 384; 16034! (largeur,hauteur)
    Bah tu m'étonnes que ça rame alors... tu génères (384 / 24) * (16034 / 24) = 10688 images ! 5 secondes, c'est même plutôt rapide...

    Quel est le but au final ? Tu as vraiment besoin d'une ImageList avec autant d'images ?

  13. #13
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 102
    Points : 41
    Points
    41
    Par défaut
    Hum, j'ai dit c'est au rapport de l'image IconSet de l'utilisateur!
    C'est une personne qui m'a dit qui le logiciel ce lance environ 5 seconde après avoir double cliquez dessus, moi sa me déranger pas trop qui met du temps, mais comme tu dit!
    pus l'image est grand, plus le temps de chargement et long!
    Tant pis, les gens ce débrouillerons!

    L'iconset, ce sont des icônes dans une seul image, l'utilisateur va en choisir un, et dans une picturebox dans la form1, l'icône qui a sélectionner, il apparaît dans la picturebox de la form1!

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 10/06/2011, 13h52
  2. Réponses: 3
    Dernier message: 26/05/2010, 17h45
  3. Sauvegarder l'image d'une Picturebox sur le disque dur
    Par jacko842 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 28/02/2010, 17h04
  4. [Article] Optimisez le chargement des images de votre site avec les Sprites CSS
    Par Bovino dans le forum Publications (X)HTML et CSS
    Réponses: 2
    Dernier message: 07/12/2009, 00h15
  5. comment mettre une image dans une liste avec les values ?
    Par Ekimasu dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 15/05/2007, 17h51

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