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

 Delphi Discussion :

Retrouver un Gif transparent


Sujet :

Delphi

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut Retrouver un Gif transparent
    Bonsoir à toutes et à tous,

    Je charge un Gif dans un TImage avec la procédure loadfromfile.

    pour un effet (negatif), je crée un bmp temporaire et j'applique mon effet sur le résultat qui est ensuite assigné à mon Timage.

    Ensuite j'aimerai retrouver mon gif d'origine avec l'effet mais forcément en transparent.

    J'ai donc fait comme le précise Melander avec l'unité GifImage.

    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
     
      Gif := TGifImage.Create;
     
      try
       bmp := Tbitmap.Create ;
        try
        bmp.Assign(imageaveceffet.picture);
     
        gif.Assign(bmp);
     
       finally
       bmp.Free;
       end;
        gif.SaveToFile('Monimage.GIF');
          finally
        Gif.Free;
     
      end;
    La sauvegarde est correcte mais sans transparence.

    Est ce que j'ai loupé quelque chôse ?

    Merci d'avance,

    @+,

    Cincap

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 876
    Points : 15 307
    Points
    15 307
    Par défaut
    Salut.

    L'objet TBitmap a des propriétés TransparentColor et TransparentMode, et, dérivée de TGraphic, il y a également une propriété Transparent ; voir l'aide Delphi sur ces propriétés, et l'exemple dans Transparent.

    P'têt' qu'il faut chercher par là ?
    Et p'têt' aussi que ton objet TGifImage en a également ?

    Juste une piste...

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut
    Bonjour à toutes et à tous,

    @ Jipété, en fait, j'ai déjà essayé avec la propriété transparente mais sans succès :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if not Bdimagegif.Execute then exit
        else  begin;
    
     gif.LoadFromFile(Bdimagegif.FileName); // Ici mon gif est bien transparent
    
     bmp.Assign(gif) ;
     bmp.Transparent := true ;
     bmp.Transparentcolor := clblack ;
     ImageMask.Picture.assign(bmp); // Ici mon gif est prêt pour le traitement de l'effet négatif
    
    bmp.Free ;
    gif.Free;
    Et pourtant !

    @+,

    Cincap

  4. #4
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Salut,

    Un lien très instructif : http://melander.dk/delphi/gifimage/

    @+

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut
    @ Droïde Système7, merci pour le lien, que je connaissai puisque j'utilise l'unité GifImage.

    A mon avis, le problème se situe au niveau de la palette de couleurs.

    Mon gif est transparent au départ, je le modifie en bmp pour l'effet négatif puis je le récupère pour affichage dans mon Timage et à ce stade à mon avis, il n'est déjà plus transparent.

    A tout hazard la procédure effet négatif :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    begin
     
      with ImageMask.Picture.bitmap do
      begin
        R := Rect(0, 0, Width, Height);
        InvertRect(Canvas.Handle, R);
      end;
      ImageMask.Invalidate;
    Je continue à tester.

    @+,

    Cincap

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 876
    Points : 15 307
    Points
    15 307
    Par défaut
    Salut.

    Est-ce que tu as étudié attentivement l'exemple "animate" (dans les démos) ?
    On y cause beaucoup de "Transparent"...

    HTH,

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut
    @ Jipété, forcément oui, mais je passe à coté de quelque chôse puisque déjà placer un gif transparent dans mon Tbitmap et le récupérer en gif, ce gif n'est déjà plus transparent.

    J'ai déjà désactivé la transparence puis je l'ai réactivée et j'ai indiqué la couleur.

    Je persévère...

    @+,

    Cincap

  8. #8
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Je vais peut-être dire une bêtise, mais si tu inversais ces deux lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     bmp.Assign(gif) ;
     bmp.Transparent := true ;

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut
    @ Droïde Système7, je l'avais fait tout en étant plus logique mais sans résultat.

    Si j'utilise mon gif directement ici cela fonctionne mais sans effet négatif :

    gif.LoadFromFile(Bdimagegif.FileName); // Ici mon gif est bien transparent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if not Bdimagegif.Execute then exit
        else  begin;
    
     gif.LoadFromFile(Bdimagegif.FileName); // Ici mon gif est bien transparent
    
     bmp.Transparent := true ;
     bmp.Transparentcolor := clblack ;
     bmp.Assign(gif) ;
    
     ImageMask.Picture.assign(bmp); // Ici mon gif est prêt pour le traitement de l'effet négatif
    
    bmp.Free ;
    gif.Free;
    Merci à tous,

    @+,

    Cincap

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 876
    Points : 15 307
    Points
    15 307
    Par défaut
    Salut.

    J'ai pensé à un truc, ce matin, en faisant une analogie avec l'époque (pas si lointaine) des appareils photo argentiques dont lesquels on mettait une pellicule...
    Si tu développes cette pellicule sans avoir pris aucune photo, tu vas obtenir un film "transparent" (puisqu'aucune image n'y aura été enregistrée) ; si maintenant tu mets ce négatif dans un agrandisseur et que tu exposes un papier, tu vas obtenir une feuille noire, normal.

    Est-ce que ça ne serait pas ton cas ?

    Tu devrais faire des tests sans faire ton inversion négative, pour voir si tout le reste de ton code fonctionne.
    Et si ça fonctionne, ben àmha il te faudrait redéfinir une couleur transparente après ton inversion.
    Valà, c'était la gamberge du petit matin, lol !

  11. #11
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut
    Bonjour à toutes et à tous,

    @ Jipété, en fait comme précisé avec le code dans la réponse d'hier à 15H56, j'ai sauvé le résultat bmp en gif avant d'appliquer l'effet négatif puis j'ai rechargé ce new gif et déjà il n'est plus transparent.

    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
    
    .........
    if not Bdimagegif.Execute then exit
        else  begin;
    
     gif.LoadFromFile(Bdimagegif.FileName); // Ici mon gif est bien transparent
    
     bmp.Transparent := true ;
     bmp.Transparentcolor := clblack ;
     bmp.Assign(gif) ;
    
     ImageMask.Picture.assign(bmp); // Ici mon gif est prêt pour le traitement de l'effet négatif
    
    // Test si mon gif est toujours Transparent
    gif.assign(bmp) ;
    gif.SaveToFile('Monimage.GIF');
    //Monimage n'est plus transparente !
    
    bmp.Free ;
    gif.Free;
    @+,

    Cincap

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 876
    Points : 15 307
    Points
    15 307
    Par défaut
    Citation Envoyé par cincap Voir le message
    @ Jipété, en fait comme précisé avec le code dans la réponse d'hier à 15H56, (...)
    Ah, mais ce code (d'hier) n'était pas clair ; celui d'aujourd'hui est beaucoup plus parlant.

    Bon ben, je sais pas quoi te dire, je suis au taf, là, sans Delphi pour tester...

    Ceci étant, j'ai quand même l'impression qu'il y a plus de code dans les exemples (Animate) que dans ce que tu nous montres...

  13. #13
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut
    Merci à tous, je clôture ce topic car en fait j'essayais de remettre à jour une ancienne application qui fonctionne correctement sans effet négatif d'ou l'idée d'ajouter cet effet non sans mal.

    Je marque donc "Délestage".

    @+,

    Cincap

  14. #14
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut
    Re bonjour, en fait en analysant le gif transparent pour mon exemple j'ai constaté que pour avoir la partie transparente de ce gif soit blanche, il fallait redéfinir cette couleur à mon bmp temporaire.

    Et ne pas oublier de mettre la propriété "Transparent" de mon Timage à true.

    Code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    gif.LoadFromFile(Bdimagegif.FileName);
     
     // Uniquement dans cet ordre
     bmp.Assign(gif) ;
     bmp.Transparent := true ;
     bmp.Transparentcolor := clwhite;
     
     ImageMask.Transparent := true ;
     ImageMask.Picture.assign(bmp);
    Donc je marque "Résolut".

    @+,

    Cincap

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

Discussions similaires

  1. C# VS2005 Gif Transparent sur une picture.
    Par mr_keyser dans le forum Windows Forms
    Réponses: 1
    Dernier message: 29/05/2007, 16h18
  2. afficher un GIF transparent au démarrage de mon appli
    Par bandito dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 21/10/2006, 11h22
  3. gif transparent ds un Jpanel
    Par dimitrimm972 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 27/05/2006, 16h22
  4. Réponses: 2
    Dernier message: 26/04/2006, 21h34

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