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

Lazarus Pascal Discussion :

TBitmap.SaveToFile : fichier parfait sous Linux et image noire sous Windows XP [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut TBitmap.SaveToFile : fichier parfait sous Linux et image noire sous Windows XP
    Voilà, c'est toujours moi.

    Et je vis des trucs qui me prennent des heures et des heures quand chez d'autres c'est torché en 5 minutes...

    Ah mais moi je suis sous Lazarus, c'est un poème, et j'essaye d'avoir des choses qui fonctionnent dans Linux et dans Windows, oui, je sais, je suis fou.

    La preuve :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        Bmp.SaveToFile('_Fullbmp_avant.bmp');
        with imgMiniature do begin
          StretchBmp(Bmp, Picture.Bitmap, Width, Height); // proc à Thierry
          Canvas.Draw(0,0, Picture.Bitmap); // ligne nécessaire pour enregistrement ok dessous, sinon image noire
          Picture.Bitmap.SaveToFile('_imgmini.bmp');
        end;
        Bmp.SaveToFile('_Fullbmp_apres.bmp');
    Le Bmp étant rempli par un système de copie d'écran, je le considère d'autant plus valide que les 3 lignes ci-dessus me génèrent 3 fichiers parfaits sous Linux.
    Et juste un seul correct sous Windows, à la ligne 5 ! Les deux autres sont à la bonne taille mais pleins de noir.

    Comment cela est-il possible ?, puisque le Bmp est le même !

    Et aussi, comment corriger ça ?

    Car, oui, j'ai bien défini avant utilisation le PixelFormat à pf24bit, j'ai bien utilisé SetSize, je ne vois pas quoi faire de plus, surtout que, je le répète, sous Linux c'est parfait...

    Mais bon, si je commente la ligne 4 (qui recopie img.Picture.Bitmap dans img.Canvas) alors l'enregistrement de img.Picture ensuite va lui aussi générer une image noire, comme si les choses fonctionnaient à l'envers : lisez bien le commentaire au milieu.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  2. #2
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut,

    Attention au format des données sous Windows = BGR et sous Linux=RGB, d'ou à mon avis ton image noire.
    Tu dois convertir les données au format RGB avant d'enregistrer ton image sous Windows. Tu peux passer par un TRawImage pour faire la conversion facilement.
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  3. #3
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    Attention au format des données sous Windows = BGR et sous Linux=RGB, d'ou à mon avis ton image noire.
    Tu dois convertir les données au format RGB avant d'enregistrer ton image sous Windows. Tu peux passer par un TRawImage pour faire la conversion facilement.


    Pas d'accord du tout, et j'en apporte la preuve :

    soit un bête prog de test et de démo, récupéré chez Michel B. (ça ne nous rajeunit pas) et qui n'a que ça comme 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
    procedure TForm1.Button1Click(Sender: TObject);
    var
      bmp : Tbitmap;
    begin
      bmp := Tbitmap.create;
      try
        bmp.pixelformat := pf24bit;
        bmp.width := 60;
        bmp.height := 48;
        with bmp.canvas do
        begin
          brush.color := clRed;
          //remplir avec le pinceau le rectangle à la dimension du canvas
          fillrect(cliprect);
        end;
        bmp.SaveToFile(FileUtil.ProgramDirectory+FloatToStr(Int(Frac(Now)*100000))+'_Full.bmp'); //
      finally
        bmp.free;
      end;
    end;
    Résultats : à gauche Windows à droite Linux :
    Nom : reddots.png
Affichages : 288
Taille : 2,0 Ko
    Si ton hypothèse était juste, j'aurais dû avoir une des deux images peinte en bleu...


    Et quand je regarde une synthèse non fonctionnelle mais résumée à l'essentiel de mon code à problème :
    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
        with Bmp4Selection do begin
          SaveToFile('_Zone.bmp'); 
    {      with imgMiniature do begin
            StretchBmp(Bmp4Selection, Picture.Bitmap, Width, Height, False, False);
            Canvas.Draw(0,0, Picture.Bitmap); // nécessaire pour enregistrer dessous, sinon image noire
            // ok L&W
            Picture.Bitmap.SaveToFile('_Zoneimgmini.bmp');
          end;}
          FreeImage;
        end;
     
        with Bmp4FulScreen do begin
          SaveToFile('_Full.bmp'); 
    {      with imgMiniature do begin
            StretchBmp(Bmp4FulScreen, Picture.Bitmap, Width, Height, False, False);
            Canvas.Draw(0,0, Picture.Bitmap); // nécessaire pour enregistrer dessous, sinon image noire
            // ok L&W
            Picture.Bitmap.SaveToFile('_Fullimgmini.bmp');
          end;}
          FreeImage;
        end;
    j'en conclus que c'est la manière dont est généré le Bitmap qui pose problème :
    Bmp4Selection est créé avec CopyRect pour les 2 plate-formes quand Bmp4FulScreen est créé avec bmp.LoadFromDevice sous Linux et BitBlt sous Windows.
    (j'ai mis le bloc en rapport avec la miniature en commentaires car dans tous les cas c'est bon dans les 2 environnements).

    J'ai ça à creuser, mais pas maintenant
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  4. #4
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Points : 1 884
    Points
    1 884
    Par défaut
    Salut JP.

    Ton problème de bitmap noir me fait penser à un de tes précédents posts, celui où, après un StretchBlt, le Scanline du bitmap te donnait un résultat 0 0 0. En fait, cela s'explique maintenant puisque ce bitmap est complètement vide (sous Windows un bitmap vide s'affiche en noir) bien que sa taille soit bonne.

    Après avoir mis en cause le TImage, j'ai fait un test de ton code avec 2 simples Tbitmap.
    Résultat : image noire ! Le TImage n'y est pour rien.
    J'ai remarqué qu'après un StretchBlt, une simple modification du Canvas du Bitmap réduit (p.ex : Canvas.Pixels[0,0]:= clblue) arrange tout !!!
    Tout se passe comme si le Canvas avait besoin d'être mis à jour (rafraichissement).
    De fait, en utilisant Canvas.Changed, c'est OK.

    Ton code devient donc (pour Windows) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    with imgMiniature do
     begin
          StretchBmp(Bmp, Picture.Bitmap, Width, Height); // proc à Thierry
          Picture.Bitmap.Canvas.Changed; // ou simplement Canvas.Changed
          Picture.Bitmap.SaveToFile('_imgmini.bmp');
    end;
    Autre solution : Dest.Canvas.Changed dans la fonction StretchBmp (si Windows).

    Ne me demande pas d'expliquer pourquoi le TImage affiche le bon bitmap alors que le fichier produit donne une image noire !??

    Amicalement
    Thierry

  5. #5
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut
    Yop, Thierry !

    Tu marches dans mes traces :
    Citation Envoyé par ThWilliam Voir le message
    Résultat : image noire ! Le TImage n'y est pour rien.
    J'ai remarqué qu'après un StretchBlt, une simple modification du Canvas du Bitmap réduit (p.ex : Canvas.Pixels[0,0]:= clblue) arrange tout !!!
    Tout se passe comme si le Canvas avait besoin d'être mis à jour (rafraichissement).
    De fait, en utilisant Canvas.Changed, c'est OK.
    Hé bien, merci beaucoup pour tes tests et ta solution.

    De mon côté, je viens de remplacer l'appel à BitBlt pour la capture dans Windows (c'était ça mon dernier problème) par un Canvas.CopyRect :
    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
        with bmp do begin // initialisé dans la proc appelante
          DesktopCanvas := TCanvas.Create;
          try
            DesktopCanvas.Handle := ScreenDC;
            {$IFDEF WINDOWS}
              r := Rect(0, 0, Screen.DesktopWidth, Screen.DesktopHeight);
              Canvas.CopyRect(r ,DesktopCanvas, r);
            {$ELSE}
              LoadFromDevice(DesktopCanvas.Handle);
            {$ENDIF}
            Result:= True;
          finally
            DesktopCanvas.Free;
          end;
        end; // with bmp
    Testé et fonctionnel

    Citation Envoyé par ThWilliam Voir le message
    Ne me demande pas d'expliquer pourquoi le TImage affiche le bon bitmap alors que le fichier produit donne une image noire !??
    mais, mine de rien, le temps perdu à cause de ces c0nn3r13s, c'est monstrueux...

    Enfin, merci à tous et bon week-end,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  6. #6
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut
    Salut salut,

    j'ai cliqué sur , mais ça n'empêche pas les discussions sur les points sombres :
    Citation Envoyé par BeanzMaster Voir le message
    Attention au format des données sous Windows = BGR et sous Linux=RGB, d'ou à mon avis ton image noire.
    Tu dois convertir les données au format RGB avant d'enregistrer ton image sous Windows. Tu peux passer par un TRawImage pour faire la conversion facilement.
    Cette chose me parle, je l'ai déjà lue ici et là, ça ne m'a pas perturbé le sommeil mais ce matin j'y pensais encore...

    En fait je crois bien qu'on n'est pas au même niveau d'abstraction, et quand je dis object.Color := clYellow; par exemple, je n'ai pas à me préoccuper des agencements RGB, BGR, avec ou sans A, devant ou derrière si avec, etc., car sinon ça serait l'enfer et totalement ingérable.

    Cette organisation nous est totalement masquée par le haut niveau d'abstraction que représentent les clColor, de la même manière, à un niveau un peu plus bas, que représentent les membres des triplets du pRGBTriple et les quadruplés du pRGBQuad quand on joue avec Scanline : si je veux un pixel rouge, je vais dire pointeur_de_ligne[index].rgb(t)Red := 255; et les autres à 0 (avec le "t" entre parenthèses présent ou pas selon qu'on est avec un pRGBTriple ou pas) et ça sera le boulot des couches bas niveau de faire les adaptations qui vont bien.

    Sinon ce n'est pas la peine de mettre des noms aux choses

    Bon week-end encore,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  7. #7
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut,

    Cette chose me parle, je l'ai déjà lue ici et là, ça ne m'a pas perturbé le sommeil mais ce matin j'y pensais encore...
    Sous windows l'affichage se fais en BGRA (pf32Bit) du coup ta capture est en BGR et TBitmap travail en RGB je sais plus ou dans les couches basses de TBitmap à un moment donnée il inverse les valeurs BR ce dont on n'a pas besoins sous Linux normalment. Dans le sujet https://www.developpez.net/forums/d1...u/#post8856100 j'avais eu le même soucis avec la capture d'écran mais l'affichage bugguais sous Linux :
    Un truc bizarre sous Linux lorsque l'on clique sur le bouton capturer l'ecran les couleurs R et B sont inversées et si on clique une 2eme fois tout redevient correct.
    Mais j'utilisais la fonction GetFormImage de TForm pour capturer la fenêtre et passais ce Bitmap à ces fonctions, pour l'affichage :

    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
     
     
    //------------------------------------------------------------------------------
    // Importation des données d'un TBitmap de bit indifferent et le converti en 32bit
    //------------------------------------------------------------------------------
    function TBZBitmap.ImportFromBitmap(Const ABitmap:Graphics.TBitmap):Boolean;
    var
      LTempBitmap: Graphics.TBitmap;
      ok,ResetAlpha:Boolean;
     
    begin
      ResetAlpha:=False;
      result:=false;
      if (ABitmap.PixelFormat <> pf32bit)  then
      begin
        LTempBitmap := Graphics.TBitmap.Create;
        try
          ResetAlpha:=True;
          LTempBitmap.PixelFormat := pf32bit;
          LTempBitmap.SetSize(ABitmap.Width, ABitmap.Height);
          LTempBitmap.Canvas.Draw(0, 0, ABitmap);
        finally
          ok:=ImportFromRawImage(LTempBitmap.RawImage);
          if ResetAlpha then SetAlpha(0,0,Width,Height,255);
          FreeAndNil(LTempBitmap);
          result:=true and (ok);
        end;
      end;
    end;
     
    //------------------------------------------------------------------------------
    // Importation des données d'un TRawImage
    //------------------------------------------------------------------------------
    function TBZBitmap.ImportFromRawImage(Const ARawImage:TRawImage):Boolean;
    var
      BytePerRow:Integer;
    begin
     // Clear(ccolBlack);
      SetSize(ARawImage.Description.Width,ARawImage.Description.Height);
      result:=false;
      // On verifie si la taille des deux tampons sont identique
      // Si ce n'est pas le cas, cela veut dire que le TRawImage n'est pas au format 32bit
      if (ARawImage.DataSize=((BufferData.Width*BufferData.Height)*4)) then
      begin
        try
          BytePerRow := RawImage.Description.BytesPerLine;
          Move(ARawImage.Data^, BufferData.Data^, BufferData.Height * BytePerRow);
        finally
          result:=true;
          Changed();
        end;
      end;
    end;
    Le truc pour vérifier le format des bitmaps capturés est de jeter un oeil sur ce que dit RawImage.Description sur les 2 systemes.

    sinon au lieu d'utiliser ta fonction StrecthBMP et/ou Canvas.CopyRect essayes (compatible Windows/Linux) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
         var R:TRect;
        ....
        Canvas.Lock;
        Canvas.StretchDraw(R,MonImageBitmap);
        Canvas.UnLock;
    sinon suis tombé la dessus pour la capture d'écran et l'utilisation de copyRect (sous delphi) : https://www.developpez.net/forums/d3...e/#post2163511


    Ne me demande pas d'expliquer pourquoi le TImage affiche le bon bitmap alors que le fichier produit donne une image noire !??
    Ben justement il y a un inversion des valeurs B et R à un moment donné pour l'affichage.

    bon week-end
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  8. #8
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut
    Io !

    Je rebondis juste là-dessus, pour le reste je verrai plus tard :

    Citation Envoyé par BeanzMaster Voir le message
    Ne me demande pas d'expliquer pourquoi le TImage affiche le bon bitmap alors que le fichier produit donne une image noire !??
    Ben justement il y a un inversion des valeurs B et R à un moment donné pour l'affichage.
    Inverser B et R dans une image jaune (255 255 0) donnerait du cyan (0 255 255), pas du noir...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  9. #9
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Inverser B et R dans une image jaune (255 255 0) donnerait du cyan (0 255 255), pas du noir...
    Ton écran il affiche en 32bits ou 24bits ? ABGR / BGRA /ARGB /RGBA ? lors de la conversion vu qu'il y a la composante Alpha la conversion ne s'effectue pas correctement d'ou le noir c'est dû au passage du pf32 à pf24
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

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

Discussions similaires

  1. Réponses: 14
    Dernier message: 06/02/2018, 16h41
  2. Réponses: 5
    Dernier message: 01/12/2008, 18h00
  3. Réponses: 17
    Dernier message: 15/05/2007, 19h35
  4. Pourquoi surfer sous linux est plus lent sous suse
    Par spiwis dans le forum Applications et environnements graphiques
    Réponses: 5
    Dernier message: 12/12/2005, 13h21

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