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

Langage Delphi Discussion :

question d'optimisation image


Sujet :

Langage Delphi

  1. #1
    Membre averti
    Avatar de Darkyl
    Homme Profil pro
    autodidacte en recherche d'emploi
    Inscrit en
    Novembre 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : autodidacte en recherche d'emploi

    Informations forums :
    Inscription : Novembre 2004
    Messages : 440
    Points : 352
    Points
    352
    Billets dans le blog
    1
    Par défaut question d'optimisation image
    Bonjour,

    Je programme une petit logiciel et quand j'exécute une procédure, celle-ci affiche 400 bitmap sur la form d'une fiche. Elle charge chaque bitmap et l'affiche à une coord précise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Bitmap.LoadFromFile('ff.bmp');
    Il se peut que les 400 bitmap aient la même image. Delphi va recharger à chaque fois l'image avec le fichier bmp ou dispose-t-il d'une sorte de cache temporaire où les fichiers bmp déjà lu sont sauvegarder...? S'il ne le fait pas, existe-t-il un moyen de le faire?
    Je précise que je n'utilise pas directx ni opengl pour l'optimisation graphique, juste le delphi 7 de base.

    Merci.
    Darkyl, celui qui conduit quand il boit pas .(faudra penser passer le permis )

  2. #2
    Membre averti
    Avatar de Darkyl
    Homme Profil pro
    autodidacte en recherche d'emploi
    Inscrit en
    Novembre 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : autodidacte en recherche d'emploi

    Informations forums :
    Inscription : Novembre 2004
    Messages : 440
    Points : 352
    Points
    352
    Billets dans le blog
    1
    Par défaut
    Ca n'irai pas plus vite si, au lieu de charger chaque bitmap à partir du fichier d'adresse nomfichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Bitmap.LoadFromFile(nomfichier);
    je créer en conception autant de timages sur ma fiches qu'il n'existent d'images différentes. Puis, lors de la création de chaque bitmap en exécution, je copie l'image du timage correspondant dedans... Attention, cela implique des if, qu'il n'y a pas dans la première méthode.

    Cela revient à:la creation d'un bitmap par accés au fichier est-elle plus longue qu'un accés à un timage de la fiche avec copie de sa zone image (même avec des if ou des cases..?
    Darkyl, celui qui conduit quand il boit pas .(faudra penser passer le permis )

  3. #3
    Membre averti
    Avatar de Darkyl
    Homme Profil pro
    autodidacte en recherche d'emploi
    Inscrit en
    Novembre 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : autodidacte en recherche d'emploi

    Informations forums :
    Inscription : Novembre 2004
    Messages : 440
    Points : 352
    Points
    352
    Billets dans le blog
    1
    Par défaut
    Vous allez pas me dire que personne ne sait?

    Je pourrez toujours tester en relevant l'heure à la fin de chacune des deux manières mais c'est pas trés fiable, étant donné le nombre de processus de windows lancé en temps réelle...

    Même pas une petite idée?..
    Darkyl, celui qui conduit quand il boit pas .(faudra penser passer le permis )

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 738
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 738
    Points : 13 273
    Points
    13 273
    Par défaut
    C'est pourtant pas bien compliqué .
    Une StringList contenant le nom des fichiers et un bitmap assigné à l'objet de chaque item.


    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
    function GetBitmap(aFileName :TFileName) :TBitmap;
    var
      i :integer;
     
    begin
      i := List.IndexOf(aFileName);
     
      if i = -1 then
      begin
        Result := TBitmap.Create;
        Result.LoadFromFile(aFileName);
        List.AddObject(aFileName, Result);
      end
      else Result := TBitmap(List.Objects[i]);
    end;

  5. #5
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    ce qu'il serait bon de savoir c'est :

    la taille des bitmaps, est elle grande ? est elle fixe ?
    est-ce pour un jeux ?
    est-ce pour un visualisateur d'image ?
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

  6. #6
    Membre averti
    Avatar de Darkyl
    Homme Profil pro
    autodidacte en recherche d'emploi
    Inscrit en
    Novembre 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : autodidacte en recherche d'emploi

    Informations forums :
    Inscription : Novembre 2004
    Messages : 440
    Points : 352
    Points
    352
    Billets dans le blog
    1
    Par défaut
    Andnotor,
    C'est pas bien compliqué mais tu n'as rien compris à mon problème. T'inquiète pas, je sais trés bien créer des bitmap et leur assigner un fichier... Ce n'était pas mon problème...

    Avant de répondre, réflexion, réflexion.. (on ne récolte que ce que l'on ..., je te laisse finir, à moins que tu ne comprenne toujours pas).

    Dr.Who, c'est pour un jeu. Les bmp font 60*40. Ce sont mes textures de fond de case.Donc, si j'ai une zone d'herbe, j'ai plein de case avec le même bmp. Mais dans ma première méthode, il charge à chaque fois depuis le fichier. Ma question reste d'actualité: dans ces conditions est-ce qu'un controle de conditions pour savoir qu'elle timage.picture copié ne serait pas plus rapide?
    Darkyl, celui qui conduit quand il boit pas .(faudra penser passer le permis )

  7. #7
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 738
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 738
    Points : 13 273
    Points
    13 273
    Par défaut
    Citation Envoyé par Darkyl Voir le message
    Il se peut que les 400 bitmap aient la même image. Delphi va recharger à chaque fois l'image avec le fichier bmp ou dispose-t-il d'une sorte de cache temporaire où les fichiers bmp déjà lu sont sauvegarder...? S'il ne le fait pas, existe-t-il un moyen de le faire?
    Désolé de vous avoir irrité Mon Seigneur. Pourtant j'ai précisément répondu à ta question.
    Ou alors tu n'as lu ma réponse qu'en diagonal...

  8. #8
    Membre averti
    Avatar de Darkyl
    Homme Profil pro
    autodidacte en recherche d'emploi
    Inscrit en
    Novembre 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : autodidacte en recherche d'emploi

    Informations forums :
    Inscription : Novembre 2004
    Messages : 440
    Points : 352
    Points
    352
    Billets dans le blog
    1
    Par défaut
    plouf plouf on recommence.

    tu met:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Result.LoadFromFile(aFileName);
    Il ne va pas lire le fichier se trouver à l'adresse afilename pour le charger dans result?

    S'il ne fait pas ça, oui ,j'ai mal compris ta réponse.

    (J'ai remarqué en me baladant sur le forum ton habitude de mettre: 'c'est pourtant pas bien compliqué'...)
    Je veux pas faire le petit vexé mais il y a une mode de communication universelle et celui-ci me tend à traduire par 't tro con ou quoi!' (en exagérant bien sur..

    Revenons à mes moutons si tu veux bien. Ta solution ne le fait pas aller voir le fichier .bmp à chaque bitmap crée?
    Darkyl, celui qui conduit quand il boit pas .(faudra penser passer le permis )

  9. #9
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 738
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 738
    Points : 13 273
    Points
    13 273
    Par défaut
    ...tu n'as lu qu'en diagonal...

    Je vais rester magnanime

    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
    var
      //Liste des images en mémoire
      List :TStringList;
     
    //Récupération d'un bitmap :-)
    function GetBitmap(aFileName :TFileName) :TBitmap;
    var
      i :integer;
     
    begin
      //Récupère l'index de l'image dans la liste
      i := List.IndexOf(aFileName);
     
      //Est-ce que cette image est déjà chargée ?...
     
      //...non
      if i = -1 then
      begin
        //Crée le bitmap...
        Result := TBitmap.Create;
        //...charge le bitmap...
        Result.LoadFromFile(aFileName);
        //...ajoute le bitmap à la liste des images en mémoire
        List.AddObject(aFileName, Result);
      end
     
      //...oui -> Renvoi le bitmap en mémoire
      else Result := TBitmap(List.Objects[i]);
    end;
    Voilà ! Et si tu n'as toujours pas compris et préfères passer par des TImage, je ne peux plus rien pour toi

  10. #10
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Citation Envoyé par Darkyl Voir le message
    Dr.Who, c'est pour un jeu. Les bmp font 60*40. Ce sont mes textures de fond de case.Donc, si j'ai une zone d'herbe, j'ai plein de case avec le même bmp. Mais dans ma première méthode, il charge à chaque fois depuis le fichier.
    Salut

    Ce que je suis en train de faire, pour un jeu fonctionnant de maniere similaire est :
    J'ai un bmp qui contient toutes les images de fond de case. Je charge ce bitmap, le découpe, et l'enregistre dans une TImageList. Ainsi, c'est assez simple a gerer, et ca permet de charger qu'une fois chaque bmp.

    Voila, bonne chance

    PS : mes images sont assez petites, 32*32

  11. #11
    Membre averti
    Avatar de Darkyl
    Homme Profil pro
    autodidacte en recherche d'emploi
    Inscrit en
    Novembre 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : autodidacte en recherche d'emploi

    Informations forums :
    Inscription : Novembre 2004
    Messages : 440
    Points : 352
    Points
    352
    Billets dans le blog
    1
    Par défaut
    Andnotor ,

    j'ai toujours pas compris. Je passe pas par des timages. Pour l'instant, j'ai un code qui ressemble à peut pré a ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    while i<20 do
    while j<20 do
    begin
    bitmap:=tbitmap.create;
    bitmap.LoadFromFile(maptab[i,j]);
    ...
    j:=j+1;
    end;
    j:=0;
    i:=i+1;
    end;
    Ce n'est pas pareil que ce que tu me dit?

    Ma question était de savoir si la méthode de laodfromfile était plus rapide qu'une copie de picture d'un timage...

    Donc j'ai toujours pas compris...

    mick605, je ne peux faire ça, j'inclue des déplacement dans ma map et je pense que je ne gagnerai pas en ressources de découper ma grande image de fond de map à chaque fois.

    en réalité, ma map fait mini 50*50 cases mais ma zone visible 20*20. Donc je recrée à chaque déplacement toutes les bitmap, mais c'est pas tro ca le pblme

    Ca m'interesserai d'avoir des nouvelles de l'avancement de ton projet (et pourquoi pas des screeners
    !!!Ma question était de savoir si la méthode de laodfromfile était plus rapide qu'une copie de picture d'un timage...
    !!!
    Darkyl, celui qui conduit quand il boit pas .(faudra penser passer le permis )

  12. #12
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 700
    Points : 5 312
    Points
    5 312
    Par défaut
    Darkyl sur ce coup là je suis d'accord avec Andnotor

    Ici tu demande s'il existe une liste des images chargée précédemment.
    Il se peut que les 400 bitmap aient la même image. Delphi va recharger à chaque fois l'image avec le fichier bmp ou dispose-t-il d'une sorte de cache temporaire où les fichiers bmp déjà lu sont sauvegarder...? S'il ne le fait pas, existe-t-il un moyen de le faire?
    Et ici, tu demande si la copie est plus rapide que le loadfromfile
    Ma question était de savoir si la méthode de laodfromfile était plus rapide qu'une copie de picture d'un timage...
    Andnotar avait répondu à ta question, c'est toi qui n'a pas posé la bonne.
    Ils m'ennervent les gens comme ça !

  13. #13
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 738
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 738
    Points : 13 273
    Points
    13 273
    Par défaut
    Non ce n'est pas pareil. On est bien obligé de charger une fois le bitmap, mais ma fonction le garde en mémoire après un premier appel et le récupère ensuite depuis celle-ci par TBitmap(List.Objects[i]). Il n'y a donc plus d'accès disque.

    Je ne reviens pas sur le TImage qui n'est pas adapté au stockage d'une image "invisible" pour l'utilisateur.

    Maintenant un peu de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    bitmap:=tbitmap.create;
    bitmap.LoadFromFile(maptab[i,j]);
     
    //à remplacer par
     
    bitmap := GetBitmap(maptab[i,j]);
    //Ne pas libérer le bitmap !!!
    et pour être plus précis:

    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
    var
      List :TStringList;
     
    function GetBitmap(aFileName :TFileName) :TBitmap;
    var
      i :integer;
     
    begin
      i := List.IndexOf(aFileName);
     
      if i = -1 then
      begin
        Result := TBitmap.Create;
        Result.LoadFromFile(aFileName);
        List.AddObject(aFileName, Result);
      end
      else Result := TBitmap(List.Objects[i]);
    end;
     
    procedure TaFonction;
    var
      bitmap : TBitmap;
    begin
      while i<20 do
        while j<20 do
        begin
          bitmap := GetBitmap(maptab[i,j]);
          ...
          inc(j)  //<---
        end;
     
        j := 0;
        inc(i);  //<---
      end;
    end;
     
    initialization
      //Création de la liste
      List := TStringList.Create;
     
    finalization
      //Libération des images... 
      while List.Count > 0 do
      begin
        List.Objects[0].Free;
        List.Delete(0);
      end;
     
      //...et de la liste
      List.Free;
     
    end.
    Tu passes aussi manifestement par un TStringGrid pour ton "champ de bataille". Ces boucles while sont certainement inutiles et consommatrices de temps. Autant ne repeindre que les cellules qui le demande ou en fonction de tes mouvements.

  14. #14
    Membre averti
    Avatar de Darkyl
    Homme Profil pro
    autodidacte en recherche d'emploi
    Inscrit en
    Novembre 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : autodidacte en recherche d'emploi

    Informations forums :
    Inscription : Novembre 2004
    Messages : 440
    Points : 352
    Points
    352
    Billets dans le blog
    1
    Par défaut
    Oui, c'est vrai, Andnotor m'avait fourni une solution pour ne chargé les images depuis le fichier qu'une seul fois. Je viens de comprendre son algorithme.
    C'est vrai aussi que je m'était mal exprimé sur ma question. Et au vue de la solution proposé par Andnotor, celle-ci n'est plus d'actualité car si je l'ai bien compris,(je vais vérifier ca), elle résout toutes mes volontés d'optimisation.

    Donc sur le coup, oui, tu m'as ouvert les yeux de facon rationnel.

    Ceci étant dit, je vais allez me balader sur les forums et répondre à des débutants:'c'est pourtant pas bien compliqué..;' , si jamais ils ne comprennent pas de suite ce que je leur dirai...

    Enfin, on s'en fiche. Le fond est important, la manière aussi.
    Mais, mea culpa, andnotor avait bien résolu mon problème.

    Je vais vérifier le gain de temps et m'en servir au besoin.

    Merci à tous et à Andnotor pour sa solution ()
    Darkyl, celui qui conduit quand il boit pas .(faudra penser passer le permis )

  15. #15
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 738
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 738
    Points : 13 273
    Points
    13 273
    Par défaut
    Citation Envoyé par Darkyl Voir le message
    Ceci étant dit, je vais allez me balader sur les forums et répondre à des débutants:'c'est pourtant pas bien compliqué..;'
    Promis, la prochaine fois, j'utiliserai des synonymes (sans pour autant tomber dans la vulgarité)

    Maintenant, ton problème est plus un problème d'analyse et de connaissance de l'environnement que de programmation.
    Même un LoadFromFile ne doit pas être si pénalisant puisqu'il y a de fortes chances que le fichier soit encore présent dans le cache disque .

  16. #16
    Membre averti
    Avatar de Darkyl
    Homme Profil pro
    autodidacte en recherche d'emploi
    Inscrit en
    Novembre 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : autodidacte en recherche d'emploi

    Informations forums :
    Inscription : Novembre 2004
    Messages : 440
    Points : 352
    Points
    352
    Billets dans le blog
    1
    Par défaut
    Pour les boucles,je ne pense pas en faire d'inutile. Je fais 400 boucles, même sur une map de 100*100 cases.

    Aprés, pour l'instant avec loadfromfile, je n'ai aucun ralentissement effectivement. A priori, pas besoin d'optimisation mais je me méfie car avec les algorithmes de gestion que je vais integré, autant optimiser dès le début du projet. Donc, si ta méthode fait gagner quelques ms à chaque bitmap, c'est déjà ca.

    Merci, je vais tester.
    Sinon, avec ta méthode, plus mon tabmap (qui représente les cellules) rangé par position sur la map, je pense qu'on peut pas aller plus vite.

    Merci encore.
    (et repardon de ma virulence)...
    Darkyl, celui qui conduit quand il boit pas .(faudra penser passer le permis )

  17. #17
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Citation Envoyé par Darkyl Voir le message
    mick605, je ne peux faire ça, j'inclue des déplacement dans ma map et je pense que je ne gagnerai pas en ressources de découper ma grande image de fond de map à chaque fois.

    en réalité, ma map fait mini 50*50 cases mais ma zone visible 20*20. Donc je recrée à chaque déplacement toutes les bitmap, mais c'est pas tro ca le pblme
    C'est pas exactement ca que j'ai dit. En fait, je charge et je découpe l'image UNE fois . Ensuite, tout se fait grâce aux ImageList.

    Mais depuis ce post, je me suis créé une unité qui me fait ca tout seul, qui découpe et stocke les images automatiquement.

    Citation Envoyé par Darkyl Voir le message
    Ca m'interesserai d'avoir des nouvelles de l'avancement de ton projet (et pourquoi pas des screeners
    !!!
    Pas de problèmes, ce projet est en fait un Snake, comme pour le défi, mais j'essaye d'en faire un multijoueur !! Si ca t'intérresse, j'ai une unité en particulier qui peut t'aider. Go MP pour que je te donne mon adresse email.

    Allez, A+

    Mick605

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

Discussions similaires

  1. [XNA] Question d'optimisation de chargement
    Par Myth_Titans dans le forum XNA/Monogame
    Réponses: 4
    Dernier message: 02/02/2007, 19h11
  2. Questions d'optimisation de requêtes
    Par beberd dans le forum Requêtes
    Réponses: 30
    Dernier message: 18/01/2007, 15h51
  3. question conceptuelle optimisation.
    Par mandrake_of_mandregas dans le forum Access
    Réponses: 1
    Dernier message: 29/12/2005, 10h07
  4. [Debutante][image]questions sur les images
    Par misstinkiete dans le forum 2D
    Réponses: 2
    Dernier message: 25/07/2005, 21h23
  5. :?: question d'optimisation!
    Par Stopher dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 21/06/2004, 17h15

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