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 :

[D5] Zoom d'image PNG avec transparence


Sujet :

Delphi

  1. #1
    Membre émérite
    Avatar de Thierry Laborde
    Homme Profil pro
    N/A
    Inscrit en
    Avril 2002
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : N/A

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 391
    Points : 2 529
    Points
    2 529
    Par défaut [D5] Zoom d'image PNG avec transparence
    Bonjour a tous,

    J'ai parcouru tous les post concernant les images PNG et la librairie Graphics32 mais je n'ai pas trouvé la solution à mon problème.
    Je précise que je suis sous Delphi5 sur une machine sous Windows XP. J'ai une form avec une image de fond sur ma form (Composant Timage classique), Nommons là par exemple ImageFond. Jusque là tout va bien. Je souhaite ensuite mettre une image PNG par dessus, nommons là ImagePNG. Donc si j'installe la librairy Pngimage et que je place une autre composant Timage avec la propriété transparent a true, pas de problème, ca fonctionne bien. Sauf que je souhaite faire un zoom sur cette image en gardant bien entendu sa transparence. j'installe donc la librairy Graphics32 et j'utilise le composant Timage32 pour mon ImagePNG pour pouvoir utiliser la propriété scale pour le zoom, sauf que je me retrouve forcément avec une couleur de fond (Ou du moins je n'ai pas réussi a trouver comment faire) et donc plus de transparence pour voir ImageFond. Je souhaiterai vraiment garder le composant TImage32 car je trouve beaucoup de fonctions interessante, mais je n'arrive pas a trouver comment avoir ma transparence et voire ainsi correctement mon image de fond.
    J'espère avoir été assez clair, et merci d'avance de vos réponses.

    Tiki06.
    _________________
    • Titre modifié par Sub0 - Ancien titre="[D5] Image PNG, Graphics32, Transparence."

  2. #2
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Salut!

    Je me suis permis de modifier ton titre, en espèrant que cela soit ok pour toi.

    En général, l'image PNG est en 32bits, chaque pixel étant codé sur 4 octets. Le RGB constitue 3 octets (24bits), et reste un octet définissant le masque alpha. Tu dois extraire le masque alpha de l'image, redimensionner l'image opaque en 24 bits et redimensionner le masque indépendament, puis refusionner ces 2 images avant de pouvoir l'afficher, car apparemment, utiliser la propriété scale pour le zoom ne suffit pas!

    Tu trouveras dans ce topic, les fonctions nécessaires pour extraire masque de l'image et le refusionner après le redimensionnement...

    à+
    De retour parmis vous après 10 ans!!

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut
    Salut,

    Pour Sub0 : la bibliothèque Graphics32 gère la transparence en natif, pas beoin de faire ce que tu dis.

    Pour Tiki06 : Je pense que tu devrais plutôt utiliser un objet ImgView32. Les TImage32 ne gèrent pas la transparence entre composants.

  4. #4
    Membre émérite
    Avatar de Thierry Laborde
    Homme Profil pro
    N/A
    Inscrit en
    Avril 2002
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : N/A

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 391
    Points : 2 529
    Points
    2 529
    Par défaut
    Salut,

    Et pas de problème pour le titre, ça me convient.
    Je vais fournir un exemple en image pour bien expliquer ce que je n'arrive pas à faire.
    Voici ma fiche principale :



    J'ai bien chargé dans mon composant TImage32 mon image PNG :



    et ma couche Alpha :



    mais on remarque bien que le contour de mon image PNG n'est pas transparent, mais de couleur ClBtnFace. Et donc je ne vois pas bien l'image en dessous. Pourtant j'ai bien mis ma propriété DrawMode à DmBlend, mais j'ai pas de transparence. J'ai regardé le composant ImgVIew32 comme le précise sovitec, mais je n'ai pas trouvé de propriété ou de méthodes pour résoudre mon problème. A moins que je n'ai pas compris un truc. Le zoom vient ensuite, mais pour l'instant même sans le zoom je n'arrive pas à avoir la transparence.

    Merci de votre aide.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut
    La méthode que j'utiliserais :
    - Remplacement du TImage de fond par un TImgView32.
    - Utilisation d'un TBitmapLayer à la place du TImage32.

    Dans ce cas la tranparence et le zoom sont gérés en natif par le composant TImgView32.

    Mes 2 centimes d'euros.

  6. #6
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    La librairie Graphics32 est vraiment très puissante!
    Je viens de la télécharger car j'ai besoin d'une fonction d'anti-aliasing.
    J'ai regardé les démos, elles sont impressionnantes et prometteuses...
    Il ya justement un exemple de zoom d'image avec transparence alpha. Je vais regarder le code de cette démo si j'ai assez de temps libre. En attendant, peut-être devrais-tu préparer une petite archive avec la partie de ton code et le fichier image que l'on pourrait downloader, ou bien donne nous le code directement ici si ce n'est pas trop long... Ce sera probablement plus facile de trouver une solution avec le code sous les yeux, à+
    De retour parmis vous après 10 ans!!

  7. #7
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    mais de couleur ClBtnFace
    Attention justement avec les couleurs systèmes!! Essaye donc avec une couleur standard pour voir...
    De retour parmis vous après 10 ans!!

  8. #8
    Membre émérite
    Avatar de Thierry Laborde
    Homme Profil pro
    N/A
    Inscrit en
    Avril 2002
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : N/A

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 391
    Points : 2 529
    Points
    2 529
    Par défaut
    Merci encore à vous 2. j'ai enfin réussi à résoudre mon problème.
    En effet je rappelle que j'ai :



    Si je charge mon composant image32 en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MonImage32.Bitmap:=BitmapList.Bitmaps[0].Bitmap;
    (Bitmaplist contient mes images PNG avec leurs couches Alpha)

    Je n'ai pas la transparence.
    Mais si par contre je passe par un TBitmapLayer comme le préconise sovitec en faisant :

    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
     
    var
      L: TFloatRect;
      Alayer:TBitmapLayer;
    begin
      ALayer := TBitmapLayer.Create(ImgView.Layers);
      with ALayer do
      begin
        Bitmap := BitmapList.Bitmaps[0].Bitmap;
        Bitmap.DrawMode := dmBlend;
        L.Left := 0;
        L.Top := 0;
        L.Right := L.Left + Bitmap.Width;
        L.Bottom := L.Top + Bitmap.Height;
        Location := L;
      end;
    end;
    Là ca fonctionne correctement et j'ai bien mon image transparente. Ensuite je peux utiliser mon zoom comme je le veux.
    Merci beaucoup a tous les 2.

    Et pour les 2 centimes d'euros sovitec tu les veux par chèque ou par virement ?????

    Tiki06.

  9. #9
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Salut!

    Un p'tit up pour signaler que j'ai mis au point un programme qui devrait t'intéresser.
    Il s'agit de mettre une image PNG sur le fond d'une form.
    Il est également possible d'ajouter d'autres images PNG par dessus.
    La démo intègre aussi un fadein / fadeout.

    http://sub0.developpez.com/delphi/pngform2.zip

    J'ai également mis au point une démo permettant de modifier la teinte d'une image PNG tout en conservant sa transparence :

    http://sub0.developpez.com/delphi/mypng2.zip

    à+
    De retour parmis vous après 10 ans!!

  10. #10
    Membre émérite
    Avatar de Thierry Laborde
    Homme Profil pro
    N/A
    Inscrit en
    Avril 2002
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : N/A

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 391
    Points : 2 529
    Points
    2 529
    Par défaut
    J'avais suivi l'autre post sur les PNG, mais encore félicitations et super boulôt pour ces sources.

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

Discussions similaires

  1. [GD] Miniature en cache d'image PNG avec transparence
    Par a.brioit dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 27/01/2012, 23h42
  2. image png avec fond transparent
    Par tortuegenie dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 08/12/2008, 09h13
  3. Image PNG avec transparence
    Par BlackStorm dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 11/09/2007, 15h00
  4. [GD] Obtention d'une image png avec gd2 inactive
    Par JavaAcro dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 05/03/2006, 16h44
  5. Traitements d'image sur PNG avec transparence
    Par Ingham dans le forum Langage
    Réponses: 16
    Dernier message: 02/08/2004, 16h42

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