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

    Informations forums :
    Inscription : juillet 2006
    Messages : 6 697
    Points : 9 424
    Points
    9 424

    Par défaut [Linux 32bits] [Graphisme] Souci de transparence avec TImageList (un classique)

    Bonjour,

    Le TImageList me fait péter les plombs (et perdre un temps cooooooooooonsidérable), qu'on en juge :

    j'essaye d'ajouter dynamiquement des gif's redimensionnés1 (ça se passe bien, je vérifie en enregistrant le résultat du resizing en tant que fichier .png) mais la couleur transparente, c'est la cata...

    Posons le décor :
    Nom : singe_in_imglist.png
Affichages : 46
Taille : 21,9 Ko
    de haut en bas
    • l'image .gif d'origine et à sa droite le résultat du resizing (je n'ai pas changé l'extension pour gagner du temps, juste rajouté '_test') vus dans l'explorateur de fichiers ;
    • dessous, l'ouverture du fichier resizé, le png donc, dans TheGimp, qui montre bien que le fond est transparent ;
    • et tout en bas l'image issue du TImageList et dessinée dans une DrawGrid (sans bordures).


    J'aimerais bien faire disparaître ce "presque" fuchsia (presque parce que clFuchsia c'est 255 0 255 et ici c'est 255 64 255 [dont je ne sais pas d'où il sort, soit dit en passant...]) et j'ai donc essayé, une ligne à la fois (le dstbmp c'est un TPicture qui reçoit le retour du resizing) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    imgList.Add(dstbmp.PNG, nil); // pour faire confiance à l'interface du TImageList en mode création qui propose clFuchsia, résultat copie d'écran ci-dessus
    imgList.AddMasked(dstbmp.Bitmap, RGBtocolor(255,64,255)); // je force le "presque" fuchsia, pas mieux 
    imgList.AddMasked(dstbmp.Bitmap, RGBtocolor(224,0,0)); // je tente du rouge relevé au colorpicker pour tester sur la boule de droite, négatif
    imgList.AddMasked(dstbmp.Bitmap, RGBtocolor(0,0,0)); // et là, en testant du noir c'est bon ! Image ci-dessous.
    Nom : singe_transp_0_0_0.png
Affichages : 44
Taille : 3,2 Ko

    La question est donc simple : comment faire fonctionner les lignes qui ne fonctionnent pas ?
    D'accord, il y a un gros changement entre la 1re ligne et les 3 autres, mais si on ne considère que les 3 dernières justement, comment faire fonctionner les 2 premières qui sont construites exactement comme la 3e, qui fonctionne ?
    J'en mange mon chapeau...

    Merci et bon dimanche,

    ---
    1 : le code du resizing (3e post en partant d'en-bas), pour ceux qui seraient intéressés. Méfi, c'est du teuton : http://www.lazarusforum.de/viewtopic.php?p=64596#p64596
    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
    Membre expérimenté
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    septembre 2015
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : septembre 2015
    Messages : 475
    Points : 1 305
    Points
    1 305

    Par défaut

    Citation Envoyé par Jipété Voir le message
    Bonjour,

    Le TImageList me fait péter les plombs (et perdre un temps cooooooooooonsidérable), qu'on en juge :
    Tu t'es remis au graphisme avec Lazarus ?

    Citation Envoyé par Jipété Voir le message
    j'essaye d'ajouter dynamiquement des gif's redimensionnés1 (ça se passe bien, je vérifie en enregistrant le résultat du resizing en tant que fichier .png) mais la couleur transparente, c'est la cata...
    ...
    1 : le code du resizing (3e post en partant d'en-bas), pour ceux qui seraient intéressés. Méfi, c'est du teuton : http://www.lazarusforum.de/viewtopic.php?p=64596#p64596
    Ce n'est pas une bonne idée de faire le redimensionnement avec cette routine bon elle utilise TFPImageCanvas tu peux donc jouer avec les modes d'interpolations mais le soucis c'est justement la prise en charge de l'apha. Dans mes souvenir afin de préservé la valeur alpha des pixels, il faut "Premultiplier celle-ci avant et peut-être refaire le truc dans l'autre sens après, je sais plus.

    Cela ne m'étonnerai pas que la fonction de "Resize" du teuton ne fonctionne qu'en 24 bits. Tu avais fais un sujet justement sur les méthodes de redimensionnement quelque part sur ce forum. Tu devrais y trouver une réponse à mon avis
    Sinon essayes de passer par un stretch sans "Interpolation" ou utilises directement StetchDraw
    Citation Envoyé par Jipété Voir le message
    J'aimerais bien faire disparaître ce "presque" fuchsia (presque parce que clFuchsia c'est 255 0 255 et ici c'est 255 64 255 [dont je ne sais pas d'où il sort, soit dit en passant...]) ......

    La question est donc simple : comment faire fonctionner les lignes qui ne fonctionnent pas ?
    Réponse totalement stupide mais fais le directement avec GIMP et choisi la couleur transparente directement dedans. Mais je pense qu'il y a une raison que tu veuilles redimensionner dynamiquement.


    Citation Envoyé par Jipété Voir le message
    J'en mange mon chapeau...

    Merci et bon dimanche,
    Tu n'as deja plus de cheveux toi aussi ?

    Bon dimanche
    • "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

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

    Informations forums :
    Inscription : juillet 2006
    Messages : 6 697
    Points : 9 424
    Points
    9 424

    Par défaut

    Citation Envoyé par BeanzMaster Voir le message
    Tu t'es remis au graphisme avec Lazarus ?
    Ouais, j'ai grave du temps à perdre !
    Là il s'agit juste d'adapter des .gif pour en insérer une image dans une TImageList aux fins d'affichage de miniatures, rien de bien compliqué, mais...

    Citation Envoyé par BeanzMaster Voir le message
    Tu n'as deja plus de cheveux toi aussi ?
    Oh que non !

    Quant au reste, ben, tu ne m'as lu qu'à moitié, donc tu es complètement à côté de la plaque : le resize fonctionne impeccablement, les fichiers .png générés sont parfaits, c'est leur ajout dans le TImageList qui foire, à cause d'un pb de couleur transparente (ou autre chose).

    Je reprends juste ces 3 lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    imgList.AddMasked(dstbmp.Bitmap, RGBtocolor(255,64,255)); // je force le "presque" fuchsia, pas bon 
    imgList.AddMasked(dstbmp.Bitmap, RGBtocolor(224,0,0)); // je tente du rouge relevé au colorpicker pour tester sur la boule de droite, négatif
    imgList.AddMasked(dstbmp.Bitmap, RGBtocolor(0,0,0)); // et là, en testant avec du noir c'est bon ! Image ci-dessous.
    Nom : singe_transp_0_0_0.png
Affichages : 33
Taille : 3,2 Ko

    Si j'active la 2e ligne je m'attends à ce que la boule en bas à droite devienne toute blanche, ce qui n'est pas le cas.
    Et si j'active la 1re c'est le fond qui devrait être tout blanc, mais non.

    Je rappelle juste pour la compréhension, que dstbmp est un TPicture, mais quelque part on s'en moque : si la 3e ligne fonctionne, les 2 autres devraient également fonctionner.

    D'où ce post,
    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
    Expert éminent
    Avatar de Jipété
    Profil pro
    Inscrit en
    juillet 2006
    Messages
    6 697
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : juillet 2006
    Messages : 6 697
    Points : 9 424
    Points
    9 424

    Par défaut

    Bon, je respire : sous XP sp2 comme sous Debian 9.1, avec Laz 1.8.2 c'est bon, ouf !, avec la ligne d'origine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    imgList.Add(dstbmp.PNG, nil);
    Faudrait quand même que je me décide à migrer les outils de la machine de prod', je sais je sais, mais j'ai la flemme et j'ai un peu peur, ben oui...

    Désolé pour le dérangement,
    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

  5. #5
    Membre expérimenté
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    septembre 2015
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : septembre 2015
    Messages : 475
    Points : 1 305
    Points
    1 305

    Par défaut

    Citation Envoyé par Jipété Voir le message
    Quant au reste, ben, tu ne m'as lu qu'à moitié, donc tu es complètement à côté de la plaque : le resize fonctionne impeccablement, les fichiers .png générés sont parfaits, c'est leur ajout dans le TImageList qui foire, à cause d'un pb de couleur transparente (ou autre chose).

    Je reprends juste ces 3 lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    imgList.AddMasked(dstbmp.Bitmap, RGBtocolor(255,64,255)); // je force le "presque" fuchsia, pas bon 
    imgList.AddMasked(dstbmp.Bitmap, RGBtocolor(224,0,0)); // je tente du rouge relevé au colorpicker pour tester sur la boule de droite, négatif
    imgList.AddMasked(dstbmp.Bitmap, RGBtocolor(0,0,0)); // et là, en testant avec du noir c'est bon ! Image ci-dessous.
    Salut, oui en effet un peu fatigué hier, j'ai un peu trop bu la veille

    Sinon j'ai testé comme ça. Et ça fonctionne

    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
    // Chargement de l'image et ajout dans l'image list
    Procedure TMainForm.DoOnFileFound(FileIterator : TFileIterator);
    var
      resizeBmp : TBitmap;
      picture : TPicture;
      fn:String;
    Begin
      Try
        fn := FileIterator.Path+FileIterator.FileName;
        if FileExistsUTF8(fn) then
        begin
          picture := TPicture.Create;
          picture.LoadFromFile(fn);
          resizeBmp := TBitmap.Create;
          resizeBmp.Width := 64;
          resizeBmp.Height := 64;
          resizeBmp.Canvas.StretchDraw(Rect(0,0,63,63),picture.Bitmap);
          imgList.AddMasked(resizeBmp,clDefault); // Ici le clDefault est important pour la bonne prise en charge de la transparence
        End;
      Finally
        FreeAndNil(picture);
        FreeAndNil(resizeBmp);
      End;
    End;                
     
    // Affichage
    Procedure TMainForm.StringGrid1DrawCell(Sender : TObject; aCol, aRow : Integer; aRect : TRect; aState : TGridDrawState);
    Var
      imgIdx : Integer;
      DstRect : TRect;
      i,j : Integer;
    Begin
      if imgList.Count>0 then
      begin
        imgIdx := (aRow* TStringGrid(Sender).ColCount)+aCol;
        if imgIdx < imgList.Count then
        begin
          DstRect := TStringGrid(Sender).CellRect(aCol,aRow);
          imgList.Draw(TStringGrid(Sender).Canvas,DstRect.Left+2,DstRect.Top+2,imgIdx,dsTransparent,itImage,true);
        End;
      End;
    end;
    A+
    • "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

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

    Informations forums :
    Inscription : juillet 2006
    Messages : 6 697
    Points : 9 424
    Points
    9 424

    Par défaut

    Citation Envoyé par BeanzMaster Voir le message
    Sinon j'ai testé comme ça. Et ça fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          imgList.AddMasked(resizeBmp,clDefault); // Ici le clDefault est important pour la bonne prise en charge de la transparence
    T'es sûr ?
    Dans XP sp2 - Laz 1.8.2 j'affiche
    Nom : addmasked.png
Affichages : 28
Taille : 2,8 Ko avec imgList.AddMasked(dstbmp.Bitmap,clDefault);,
    et
    Nom : add_tout_court.png
Affichages : 26
Taille : 3,2 Ko avec imgList.Add(dstbmp.Bitmap, nil);...

    La seule différence que je vois entre ton code et le mien, c'est que tu utilises un TBitmap quand moi j'utilise le .Bitmap d'un TPicture.
    En regardant vit' fait le code du TPicture, je lis function GetBitmap: TBitmap; qui me fait déduire que dans les deux cas il est question de TBitmap.
    Y aurait-il des différences fondamentales cachées ailleurs ?

    Ça demanderait des tests plus poussés pour comparer en profondeur et franchement, ça me gonfle.
    Je propose qu'on ne passe pas la semaine là-dessus, .
    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
    Membre expérimenté
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    septembre 2015
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : septembre 2015
    Messages : 475
    Points : 1 305
    Points
    1 305

    Par défaut

    Citation Envoyé par Jipété Voir le message
    Ça demanderait des tests plus poussés pour comparer en profondeur et franchement, ça me gonfle.
    Je propose qu'on ne passe pas la semaine là-dessus, .
    C'est clair, d'accord avec toi

    Juste pour info, par rapport à mon bout code j'ai essayé de forcé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     resizeBmp := TBitmap.Create;
     resizeBmp.PixelFormat := pf32bit; 
     resizeBmp.Width := 64;
     resizeBmp.Height := 64;
     resizeBmp.Transparent := true;
     resizeBMP.TransparentMode := tmAuto;  
    ....
    imgList.AddMasked(resizeBmp,clNone);
    // ou
    imgList.Add(ResizeBmp,nil);
    Résultat ça passe pour les pour les GIF, mais plus pour les PNG comme d'hab quoi. Rien de linéaire dès qu'il faut gérer la transparence ou plusieurs formats différents, faut adapter chaque cas

    Sur ce bonne fin de journée
    • "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

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

Discussions similaires

  1. Encore et toujours souci de transparence avec IE
    Par Satch dans le forum jQuery
    Réponses: 5
    Dernier message: 26/08/2011, 08h50
  2. Texte en transparence avec TextOut
    Par TigreRouge dans le forum MFC
    Réponses: 2
    Dernier message: 06/06/2005, 22h57
  3. probleme de transparence avec fog
    Par Daedar dans le forum OpenGL
    Réponses: 10
    Dernier message: 03/05/2004, 08h14
  4. [linux][gcc] Comment travaille t-on avec plusieurs fichiers?
    Par kaygee dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 02/04/2004, 17h48
  5. [VB6] [Graphisme] Tracer un cercle avec pset
    Par bleuerouge dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 09/12/2002, 17h12

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