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

VB 6 et antérieur Discussion :

stretch et GDI


Sujet :

VB 6 et antérieur

  1. #1
    Membre confirmé
    Avatar de nabil
    Inscrit en
    Avril 2002
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 223
    Par défaut stretch et GDI
    Bonjour tous le monde,
    je voudrai afficher une image dans un picturebox comme si on le fait avec picture.paintpicture, j'ai utilisé 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
    15
    16
    17
    If (GDIPlusCreate()) Then
     
       Dim im As New GDIPImage
       im.FromFile App.Path + "\test.jpg"
     
       Dim gfx As New GDIPGraphics
       gfx.FromHDC (Picture1.hDC)
       gfx.InterpolationMode = InterpolationModeHighQualityBicubic
       gfx.DrawImageStretchL im, 0, 0, 0, 0, im.Width, im.Height, UnitPixel
     
       gfx.Dispose
       im.Dispose
     
       Picture1.Refresh
     
       GDIPlusDispose
    End If
    mais je ne récupére qu'une partie de l'image, comment puis je faire un stretch sur les dimension de mon picturebox.

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour,
    avec l'API
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, _
    ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, _
    ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, _
    ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, _
    ByVal dwRop As Long) As Long
    A+

  3. #3
    Membre confirmé
    Avatar de nabil
    Inscrit en
    Avril 2002
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 223
    Par défaut
    bonjour,
    je ne sais pas comment faire aplliquer avec mon code.
    je pense qu'il faudra utiliser un picturebox source et un autre destination.
    Pour mon code j'utilise un GDIPImage comment faire.

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonsoir,
    Piste suivante, charger l'image dans un contrôle image (visible=false : strech=True) et ensuite adapter les mesures entre l'image et la picture box, elle peut notamment être diposée sous n'importe quel mesure et à n'importe quel endroit sur la PictureBox.
    Si toujours pas de solution je reviendrai avec exemple.
    A+

  5. #5
    Membre confirmé
    Avatar de nabil
    Inscrit en
    Avril 2002
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 223
    Par défaut
    je connais cette methode. c comme j'ai déjà dis en utilisant 2 picturebox ou un picturebox et un image.
    Mon problème est que je ne veux pas charger l'image intial dans un controle (image ou picturebox) mais plutôt dans une zone GDIPGraphics ou un stdpicture (pas dans un controle).
    j'espère que être clair en posant ma question.

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    mais plutôt dans une zone GDIPGraphics ou un stdpicture
    bonjour,

    tu viens tout simplement de prononcer le mot que j'attendais.

    Attention toutefois : tu auras des dimensions en unités Himetrics, à transposer donc en unités logiques de ta fenêtre.

  7. #7
    Membre confirmé
    Avatar de nabil
    Inscrit en
    Avril 2002
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 223
    Par défaut
    bonjour,
    comment faire alors ucfoutu

  8. #8
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bon...

    Commence par bucher (aide en ligne) l'utilisation de ScaleX et de ScaleY.

    Regarde, pendant que tu y es, ce qu'est la constante vbHimetric et ce qu'est la propriété scalemode.

    Essaye d'abord seul (ce n'est pas difficile).

  9. #9
    Membre confirmé
    Avatar de nabil
    Inscrit en
    Avril 2002
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 223
    Par défaut
    Bonjour,
    j'ai fait ce code qui marche bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Option Explicit
    Dim obj As New StdPicture
    Private Sub Command1_Click()
    Dim Debut As Long, Fin As Long
    Debut = GetTickCount()
    Set obj = LoadPicture("test.jpg")
    Picture1.PaintPicture obj, 0, 0, Picture1.Width, Picture1.Height
    Fin = GetTickCount()
    MsgBox "Temps mis en millisecondes : " & Fin - Debut
    End Sub
    ce code est fonctionelle mais le seul problème qu'il est similaire presque en terme de temps d'exécution que celui la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Command1_Click()
    Dim Debut As Long, Fin As Long
    Debut = GetTickCount()
    Image1.Picture = LoadPicture(App.Path + "\test.jpg")
    Picture1.PaintPicture Image1, 0, 0, Picture1.Width, Picture1.Height
    Fin = GetTickCount()
    MsgBox "Temps mis en millisecondes : " & Fin - Debut
    End Sub
    le but de ce petit projet est de faire sorte que l'image sera afficher de la manière la plus raide.
    est ce que qu'avec stretchblt au lieu de paintpicture ca sera plus rapide.
    De plus j'ai pense a utiliser GDIplus car j'ai lu que ca permet un traitement plus rapide des images que GDI ou autre mais je n'ai trouver laa fonction qui fera un stretch sur un picturebox.

  10. #10
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 540
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 540
    Par défaut
    Le Forestier il ya erreur d'appréciation , Nabil utilise Gdi+ c.a.d. du code "managed" et pas du code natif comme StretchBlt

  11. #11
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Ma petite contribution à cette discussion.

    Citation Envoyé par nabil
    ce petit projet est de faire sorte que l'image sera afficher de la manière la plus rapide
    Quelque soit le moyen employé, il faut considérer un impératif, le chargement d’un fichier est faite depuis un support soit purement électronique, un espace mémoire (circuit intégré), soit depuis un support électromécanique, un disque dur, un lecteur de CD, une disquette (si, si sa existe encor )…. .

    Pour cette partie du chargement (accès aux données), le temps de cet accès, quelque soit le support, sera identique, que l’on emploi une routine "purement" VB ou une API.

    Si on accepte le fait que les contraintes mécaniques du disque dur, CD, disquette, sont forcement plus long que celui du déplacement des électrons à l’intérieur d’un circuit électronique.

    Un autre support mémoire dont je n’ai pas encor parlé, une clef USB, purement un déplacement d’électrons, oui mais passage par un protocole d’accès indirect (protocole conversation USB), par apport à une mémoire interne qui transite quasi directement sur le bus, donc avec beaucoup moins de couche.

    Une expérience que tout le monde a faite une fois, avec son meilleur logiciel de dessin, charger un certain nombre d’image, au bout d’un certain temps, les infos ne sont plus transférable en mémoire, donc inscrite sur le disque dur (qui simulera de la mémoire), là on voie tout de suite que cela commence à ramer.

    Citation Envoyé par nabil
    ce petit projet est de faire sorte que l'image sera afficher de la manière la plus rapide
    Pour la partie affichage, au chargement, certaines APIs (qui font le chargement et l'affichage), seront plus rapide, car le choix du moment T à envoyer à l’écran les ordres d’allumage des pixels, lui peut être très différent (tout du moins dans la perception de notre cerveau).
    Certaines de ces APIs demandes au gestionnaire de l’écran, l’affichages de la totalité des pixels, une autre API va demander l’affichage imediat d’une ligne sur deux des pixels, ….. .

    Citation Envoyé par nabil
    car j'ai lu que ca permet un traitement plus rapide des images
    Par contre le temps de traitement, après le chargement, les données étant maintenant en mémoire électronique, lui, en utilisant une/des APIs plutôt que les commandes "purement" VB (PaintPicture, n’étant que le fait de dessiner les pixels, sans traitement mise a part son dernier argument Opcode), peut être d’un rapport allant jusqu'à 600, de part mes petites expériences.

    Salutation
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  12. #12
    Membre confirmé
    Avatar de nabil
    Inscrit en
    Avril 2002
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 223
    Par défaut
    bonjour,
    merci tout d'abord pour vos contributions. Mais je veux ajouter quelques précision pour bien présenter mon point de vue :

    1- Lorsque je parle du traitement je me restreint à l'affichage et pas à l'apllication de masque ou autre traitement.
    2- Pour le support , on charge toujours à partir d'un disque dur.
    3- Je pense que le temps d'affichage entre :
    une image stocké sur HD----------->picturebox (avec loadpicture)
    est nettement supérieur à
    une image stocké en mémoire (stdpicture)----------->picturebox
    4- le temps d'affichage en utilisant Bitblt ou StretchBlt est nettement inférieur à paintpicture
    5- le temps d'affichage avec GDI+ est aussi est nettement inférieur à paintpicture

    Conclusion : je veux savoir la manière la plus performante pour afficher une image (soit la stocké en mémoire, la charger directement.....)
    De plus, on distingue une différence entre les softs pour ce problèmes.

  13. #13
    Membre confirmé
    Avatar de nabil
    Inscrit en
    Avril 2002
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 223
    Par défaut
    regarder ce lien http://www.vbaccelerator.com/home/VB...le/article.asp
    ce donne une bonne idée concernant la vitesse de chargement et d'affichage d'image.

  14. #14
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Salut
    En liaison au lien que tu donnes,
    dans un module.bas
    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
    Option Explicit
     
    Private Type PictDesc
        cbSizeofStruct As Long
        picType As Long
        hImage As Long
        xExt As Long
        yExt As Long
    End Type
     
    Private Type Guid
        Data1 As Long
        Data2 As Integer
        Data3 As Integer
        Data4(0 To 7) As Byte
    End Type
     
    Private Declare Function OleCreatePictureIndirect Lib "olepro32.dll" ( _
          lpPictDesc As PictDesc, _
          riid As Guid, _
          ByVal fPictureOwnsHandle As Long, _
          ipic As IPicture _
        ) As Long
    Public Declare Function LoadImage Lib "user32" Alias "LoadImageA" _
        (ByVal hInst As Long, ByVal lpsz As String, _
        ByVal iType As Long, _
        ByVal cx As Long, ByVal cy As Long, _
        ByVal fOptions As Long) As Long
     
    ' iType options:
    Public Const IMAGE_BITMAP = 0
    Public Const IMAGE_ICON = 1
    Public Const IMAGE_CURSOR = 2
    ' fOptions flags:
    Public Const LR_LOADMAP3DCOLORS = &H1000
    Public Const LR_LOADFROMFILE = &H10
    Public Const LR_LOADTRANSPARENT = &H20
    Public Start As Single
    Public StartDate As Date
     
    Public Function BitmapToPicture(ByVal hBmp As Long) As IPicture
    If (hBmp = 0) Then Exit Function
    Dim NewPic As Picture, tPicConv As PictDesc, IGuid As Guid
    With tPicConv
        .cbSizeofStruct = Len(tPicConv)
        .picType = vbPicTypeBitmap
        .hImage = hBmp
    End With
    With IGuid
        .Data1 = &H20400
        .Data4(0) = &HC0
        .Data4(7) = &H46
    End With
    OleCreatePictureIndirect tPicConv, IGuid, True, NewPic
    Set BitmapToPicture = NewPic
    End Function
    Public Sub ResultChrono()
    'calcul chronometre
    If Date = StartDate Then
     Form1.Caption = "** Temp d'execution -> " & CStr(Timer - Start) & " Sc **"
     Else
     ' le chrono a été enclanché avant minuit et l'arret apres
     '86399.99 = 24h en seconde
     Form1.Caption = "** Temp d'execution -> " & CStr((86399.99 - Start) + Timer) & " Sc **"
    End If
    End Sub
    Sur un Form, 1 PictureBox, 2 CommandButton
    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
    Option Explicit
    Private Sub Form_Load()
    Picture1.AutoSize = True
    End Sub
     
    ' poids de l'image 17.2Mo
    Private Sub Command1_Click()
    Dim hIcon As Long
    Start = Timer: StartDate = Date 'depart chrono
    Picture1.Cls
    hIcon = LoadImage(App.hInstance, _
            "C:\PersoFrancis\Montage.bmp", IMAGE_BITMAP, _
            0, 0, _
            LR_LOADFROMFILE Or LR_LOADMAP3DCOLORS)
    Set Picture1.Picture = BitmapToPicture(hIcon)
    ResultChrono 'calcul du temps de l'action executée
    End Sub
    Private Sub Command2_Click()
    Start = Timer: StartDate = Date 'depart chrono
    Picture1.Cls
    Picture1.Picture = LoadPicture("C:\PersoFrancis\Montage.bmp")
    ResultChrono 'calcul du temps de l'action executée
    End Sub
    Pas très convaincant, pour moi une amélioration de moins de 20%.
    Je suis en train de me battre avec GDIplus.DLL, plantage immédiat de l’éditeur VB au moment du run, ou, bizzarement en cour d’écriture du code aprés un arret avant l'erreur a la ligne sité plus bas, suite a au moins un run.

    Pour ma part, suite a la lecture de ce post ne parvenant pas a modifier de VBA en VB6, cela fait depuis hier que je patine sur Image0.Picture = ClGDIP.GdiPlusToPictureData la commande VBA étant Me.Image0.PictureData = ClGDIP.GdiPlusToPictureData
    , ClGDIP étant le nom du module de classe.
    Mais je ne désespére pas, je finirai bien par trouvé (peut être puisque,) .
    Citation Envoyé par nabil dans sa signature
    Il ne faut jamais désespérer, il y a toujours une solution
    A+
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  15. #15
    Membre confirmé
    Avatar de nabil
    Inscrit en
    Avril 2002
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 223
    Par défaut
    Enfin, j'ai trouvé une bonne solution.Il donne des résultats trés rapide par rapport à Paintpicture et loadpicture de VB (au moins 3 fois plus rapide).
    Voici le code :

    On met dans module cela :
    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
    Public Declare Function GetTickCount Lib "kernel32" () As Long
     
    Public Declare Function GdipCreateFromHDC Lib "gdiplus" (ByVal hdc As Long, graphics As Long) As GpStatus
    Public Declare Function GdipDisposeImage Lib "gdiplus" (ByVal image As Long) As GpStatus
    Public Declare Function GdipDrawImageRectRectI Lib "gdiplus" (ByVal graphics As Long, ByVal image As Long, ByVal dstx As Long, ByVal dsty As Long, ByVal dstwidth As Long, ByVal dstheight As Long, ByVal srcx As Long, ByVal srcy As Long, ByVal srcwidth As Long, ByVal srcheight As Long, ByVal srcUnit As GpUnit, ByVal imageAttributes As Long, Optional ByVal callback As Long = 0, Optional ByVal callbackData As Long = 0) As GpStatus
    Public Declare Function GdipDeleteGraphics Lib "gdiplus" (ByVal graphics As Long) As GpStatus
    Public Declare Function GdipLoadImageFromFile Lib "gdiplus" (ByVal filename As String, ByRef image As Long) As GpStatus
    Public Declare Function GdiplusStartup Lib "gdiplus" (ByRef token As Long, inputbuf As GdiplusStartupInput, Optional ByVal outputbuf As Long = 0) As GpStatus
    Public Declare Sub GdiplusShutdown Lib "gdiplus" (ByVal token As Long)
    Public Declare Function GdipGetImageDimension Lib "GdiPlus.dll" (ByVal mImage As Long, ByRef mWidth As Single, ByRef mHeight As Single) As GpStatus
    Public Enum GpStatus
        Gp_Ok = 0
        Gp_GenericError = 1
        Gp_InvalidParameter = 2
        Gp_OutOfMemory = 3
        Gp_ObjectBusy = 4
        Gp_InsufficientBuffer = 5
        Gp_NotImplemented = 6
        Gp_Win32Error = 7
        Gp_WrongState = 8
        Gp_Aborted = 9
        Gp_FileNotFound = 10
        Gp_ValueOverflow = 11
        Gp_AccessDenied = 12
        Gp_UnknownImageFormat = 13
        Gp_FontFamilyNotFound = 14
        Gp_FontStyleNotFound = 15
        Gp_NotTrueTypeFont = 16
        Gp_UnsupportedGdiplusVersion = 17
        Gp_GdiplusNotInitialized = 18
        Gp_PropertyNotFound = 19
        Gp_PropertyNotSupported = 20
    End Enum
     
    Public Type GdiplusStartupInput
        GdiplusVersion As Long
        DebugEventCallback As Long
        SuppressBackgroundThread As Long
        SuppressExternalCodecs  As Long
    End Type
     
    Public Enum GpUnit
        UnitWorld = 0
        UnitDisplay = 1
        UnitPixel = 2
        UnitPoint = 3
        UnitInch = 4
        UnitDocument = 5
        UnitMillimeter = 6
    End Enum
    dans une form contenat un picturebox et un commandbutton :

    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
     
     
    Private Sub Command1_Click()
    Dim Debut As Long, Fin As Long
    Debut = GetTickCount()
    '****************************************************************
    Dim handle_graph As Long
    Dim handle_image As Long
    Dim handle_imageAttr As Long
     
        If GdipCreateFromHDC(Picture1.hdc, handle_graph) = Gp_Ok Then
            fichier = App.Path + "/test.jpg"
     
            If GdipLoadImageFromFile(StrConv(fichier, vbUnicode), handle_image) = Gp_Ok Then
                    GdipGetImageDimension handle_image, w, h
                    GdipDrawImageRectRectI handle_graph, handle_image, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, 0, 0, w, h, UnitPixel, 0
            End If
     
                GdipDisposeImage handle_image
        End If
     
            GdipDeleteGraphics handle_graph
     
       Picture1.Refresh
     
    '**********************************************************************
    Fin = GetTickCount()
    MsgBox "Temps mis en millisecondes : " & Fin - Debut
    End Sub
     
    Private Sub Form_Initialize()
    Dim param As GdiplusStartupInput
    Dim handle_session_gdiplus As Long
     param.GdiplusVersion = 1
        GdiplusStartup handle_session_gdiplus, param
    DoEvents
     
    End Sub
     
    Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
        GdiplusShutdown handle_session_gdiplus
    DoEvents
    End Sub
    J'espère que tous le monde en profite et je remercie tous ceux qui ont participé à cette discussion.

    NB: Il ne faut jamais désesperer, il y a toujours une solution.

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

Discussions similaires

  1. [GDI] Texte
    Par raf_gug dans le forum MFC
    Réponses: 4
    Dernier message: 22/03/2004, 15h02
  2. OpenGL + GDI
    Par Twofy dans le forum OpenGL
    Réponses: 4
    Dernier message: 26/02/2004, 17h13
  3. [GDI] Disparition d'un Bouton...
    Par Strider dans le forum MFC
    Réponses: 4
    Dernier message: 20/02/2004, 08h50
  4. [mfc][gdi] un tuto ?
    Par VitamineC dans le forum MFC
    Réponses: 8
    Dernier message: 06/02/2004, 22h51
  5. [MFC] libération des objets GDI's
    Par Kevgeii dans le forum MFC
    Réponses: 5
    Dernier message: 01/02/2004, 10h37

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