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 :

gestion des contours des png [Archives]


Sujet :

Delphi

  1. #61
    Membre du Club Avatar de DarkChamallo
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 113
    Points : 56
    Points
    56
    Par défaut
    Houba, houba, ça y est je crois alors !
    Tu vas faire des heureux. Depuis l'temps qu'on te dit qu'on veut du PNG Lol...

    Je regrette pas le triturage de neurones, ça m'a fait découvrir un tas de trucs à force de chercher sur le web.

    GroOOos merci de tout coeur

    Au fait, avec un PNG plus grand ça saccade quand je déplace (comme si c'était un objet magnétique attiré par une grille virtuelle), qu'est-ce qui pourrait améliorer ça (avec la même méthode UpdateLayeredWindow, ça le faisait pas à l'origine) ?

    ...mais pour ajouter une image PNG transparente par dessus le fond (comme on pourrait rajouter un button ou edit) celle-ci se retouve avec un contour qui n'est pas antialiasé évidemment...

    ...est-ce qu'une partie de ce code peut être réutilisé au cours de l'exécution pour antialiser les différentes images PNG transparentes que j'affiche sur ma fiche ?

    à moins de fusionner toutes les PNG au début du FormCreate tout en conservant les positions sur la fiche (imagecopymerge en php ?) ?

    Bon, là je te laisse dormir, tout de même

  2. #62
    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
    Tu as cliqué direct sur le lien et t'as posté de suite ton message sans lire le mien ou bien ?
    Citation Envoyé par sub0
    Le seul problème est qu'avec une config pas très puissante, le déplacement saccade. La solution serait de fusionner les forms juste avant le déplacement puis de restaurer après, mais bon, est-ce que ça en vaut la peine ?
    De retour parmis vous après 10 ans!!

  3. #63
    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
    Bon finalement, je l'ai codé rapidos, mais je l'améliorerai après : http://sub0.developpez.com/delphi/pngform.zip

    Qu'en penses-tu ?

    [EDIT] Pour l'ajout d'image PNG, je pense en effet qu'il faudra le dessiner soi-même. En tous les cas, je n'ai pas de compos PNG dans ma palette, donc les images PNG sont toutes crées dynamiquement et dessinées par le programme qui les utilisent... Comme d'hab, il faut capturer l'arrière-plan de l'image, récupérer le bitmap opaque et le masque alpha du PNG, etc (voir la fonction MakeBlend). Mais le plus facile (et performent), c'est effectivement de tout fusionner dès le départ. Je vais coder une fonction pour le chargement des images PNG, ce sera plus simple.
    De retour parmis vous après 10 ans!!

  4. #64
    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
    Excelent, j'ai ajouté les fonctions d'insertion PNG et j'ai fait en sorte à ce que les masques de transparence soit pris en compte dans la fusion... Pour éxécuter cette démo, il faut extraire les fichiers PNG et l'EXE sur le disque dur :

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

    ps: Je vais proposer cette source dans la section "sources" du forum, à+
    De retour parmis vous après 10 ans!!

  5. #65
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 184
    Points : 149
    Points
    149
    Par défaut
    Merci pour ton travail sur ce code, je le sauvegarde dans ma caverne d'Ali Baba pour travaux ultérieurs

  6. #66
    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
    Merci du compliment!
    Je viens de trouver un petit bug, la loupe ne fonctionne pas avec le programme. C'est dommage, ça me coupe dans mon élan pour poursuivre ce projet... Je cherche donc une solution.
    De retour parmis vous après 10 ans!!

  7. #67
    Membre du Club Avatar de DarkChamallo
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 113
    Points : 56
    Points
    56
    Par défaut
    Tôooooo, comme dirait Homer Je me suis marré en voyant ton exemple parce que quand je trafiquais de mon côté c'était aussi avec Homer Marrant... Les amateurs de Bière se rencontrent (je l'jure, j'en bois que pour les coupes du monde ! )

    Pour le résultat final c'est tout simplement GENIAL

    Au passage je remarque qu'il y a une sorte d'AlphaBlend sur l'image du dessus (chez moi c'est Homer en plus grand et qui dépasse plus) car je vois un peu ce qu'il y a dessous. C'est joli mais je vais voir si je peux rendre Homer complètement opaque... D'ailleurs au cours du déplacement de la fenêtre même le bouton est légèrement alphablendé

    Je teste cet aprèm. J'essairai aussi de placer l'image du dessus à différents endroits.

    Déjà "encore" Re-merci une nouvelle fois en plus en plus

  8. #68
    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
    Merci du compliment!
    En fait, il me semble bien que l'opacité des PNG correspond à la luminosité de la transparence, et cette valeur varie de 0 à 240 et non jusqu'à 255. Cela peut induire en erreur dans certain cas...
    Bref, on corrigera le code si nécessaire.

    A propos, je me suis amusé à ajouter un fadein/fadeout au programme et j'ai aussi paufiner certains trucs :
    http://sub0.developpez.com/delphi/pngform2.zip

    [EDIT] Je viens de remarquer un bug : Lorsqu'on éxécute plusieurs fois le programme, et que l'on déplace la partie transparente d'une form sur une autre, certains pixels (du Homer en l'occurence) sont buggés. Pour l'instant, je ne vois pas d'où ça vient... Mais peut-être que ya un rapport avec la valeur maximale du masque alpha (240).

    [EDIT2] Oui, c'était bien ça. C'est corrigé. Ce bug provoquait aussi le bouton transparent pendant le déplacement... Alors d'après ce que j'ai compris, l'image est opaque lorsque le masque possède une valeur de 239 à 255, sinon elle est plus ou moins transparente. Peut-être aussi que je me trompe là-dessus... Si qq'un connait, qu'il m'explique svp, à+
    De retour parmis vous après 10 ans!!

  9. #69
    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
    Le top maintenant que c'est à peu près au point, ce serait d'en faire un composant TPNGForm pour pouvoir l'intégrer facilement à ses futurs projets et pour que les différentes images PNG soient intégrées à l'EXE... Mais bon, perso, je n'aurais pas le temps de le réaliser.

    [EDIT] Si cela t'intéresse, je possède le code pour changer la teinte d'une image PNG :
    http://sub0.developpez.com/delphi/mypng2.zip
    On peut également envisager de modifier la luminosité et le contraste.
    Je possède également le code pour redimensionner une image PNG avec un filtre anti-aliasing.
    J'utilise ces fonctions pour dessiner la table de mon jeu d'échecs :
    http://sub0.developpez.com/delphi/exe/TableB5.zip
    De retour parmis vous après 10 ans!!

  10. #70
    Membre du Club Avatar de DarkChamallo
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 113
    Points : 56
    Points
    56
    Par défaut
    Tu as bien bossé on peut te remettre la médaille gravée monsieur-le-spécialiste-du-PNG vu le temps que tu y as passé et vu la qualité du résultat !!!

    Ci-dessous, Sub0, champion du PNG après 50 ans de boulot pour trouver la formule miracle

    http://www.pvda.be/images/solidair20...erhofstadt.jpg

  11. #71
    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
    Contrairement à ce que tu pourrais peut-être croire, je ne suis pas entièrement satisfait. UpdateLayeredWindow ne fonctionne que sous Windows 32. La 1ère méthode était plus compatible... A propos, Waskol a peut-être trouvé un moyen d'obtenir ce que je cherchais au départ. Ainsi, je pourrais permuter d'unité selon si l'utilisateur est sous Win32 ou pas, et éxécuter le code en conséquence.
    De retour parmis vous après 10 ans!!

  12. #72
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 184
    Points : 149
    Points
    149
    Par défaut
    Salut sub0,
    Je me suis amusé à modifier ton code afin qu'il fonctionne avec les boutons de la souris inversés.

    J'ai prôné une autre approche pour le déplacement de la fenêtre en créant un type Tpngform et en utilisant les messages WM_NCHITTEST, WM_MOVING et WM_EXITSIZEMOVE.

    Maintenant ça fonctionne avec les boutons inversés mais j'ai juste un petit problème stupide avec le premier déplacement.

    En effet , j'ai noté que dans ton code qu'après le oncreate de la form1, le pngform ne contient pas les contrôles de la form1. Ils sont fusionnés lors du premier déplacement.

    Avec ma méthode, ceci cause un problème pour le premier déplacement car les contrôles vont disparaitre un très court instant (évidemment car le pngform n'a pas les contrôles)


    J'ai ajouté ça à la fin du oncreate

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      FusionForm(bmp);
      UpDateForm(PNGForm, bmp);
    Et là les contrôles sont sur l'image mais sans le texte du memo.
    Je suis un peu confus.

    C'est sûrement tout bête.
    J'ai essayé de mettre à jour l'image dans onshow ou onactivate mais là j'ai une erreur.

    J'ai attaché le code afin que tu y jettes un oeil
    Fichiers attachés Fichiers attachés

  13. #73
    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!

    Le problème est du au fait que lorsqu'on clique sur PNGForm, la form récupère immédiatement le focus et du coups, il faut réafficher la fenêtre des controls au 1er plan... En fait, j'avais posté un sujet à propos de ce problème :
    http://www.developpez.net/forums/sho...d.php?t=162708
    De retour parmis vous après 10 ans!!

  14. #74
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 184
    Points : 149
    Points
    149
    Par défaut
    Une bonne nuit de sommeil de 4 heures et on trouve la solution au bout de 2 minutes

    J'ai ajouté la fusion et l'update de la form (FusionForm(FusBitmap);
    UpDateForm(PNGForm, FusBitmap)) dans la procedure NCHITTEST et là tout est nickel

    Reste à nettoyer le tout pour les fuites de mémoire

  15. #75
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Je vous remercie tous, pour votre exellent boulot
    J'ai pu enfin faire ce que je désirais depuis longtemps

    Si quelqu'un réalise le compo, je suis prenneur

  16. #76
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 184
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par illuzmax
    Je vous remercie tous, pour votre exellent boulot
    J'ai pu enfin faire ce que je désirais depuis longtemps

    Si quelqu'un réalise le compo, je suis prenneur
    Je suis en train de travailler sur le compo.
    Ça semble fonctionner mais le code a besoin d'un sérieux nettoyage et d'être testé plus en profondeur.

  17. #77
    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
    Citation Envoyé par sfpx
    J'ai ajouté la fusion et l'update de la form (FusionForm(FusBitmap);
    UpDateForm(PNGForm, FusBitmap)) dans la procedure NCHITTEST et là tout est nickel
    Lors de mes tests, j'ai ajouté un sleep(500) entre le moment où la form reçoit le message comme quoi la fenêtre est cliquée et le moment où la form du 1er plan est redessinée. Et effectivement, les controls vont disparaître. Pour résoudre ce problème, je pense qu'il faudra soit fusionner l'image des controls à la form d'arrière-plan, soit intercepter le message pour bloquer le focus de la form d'arrière-plan...
    Quoiqu'il en soit, on peut s'appercevoir que les controls scintillent lorsqu'on clique sur la form pour la déplacer, non ?
    Et plus il y aura de controls dans la form, plus ça se verra. C'est pour ça que je pense qu'il faut intercepter le focus afin d'éviter aux controls de devoir se redessiner à chaque fois que l'on clique sur la form. Sinon, une autre solution plus évidente serait de n'utiliser qu'une seule form. Je cherche une solution... .
    De retour parmis vous après 10 ans!!

  18. #78
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 184
    Points : 149
    Points
    149
    Par défaut
    Je ne sais pas.
    J'ai plus de scintillement moi.

    J'ai crée un composant et je m'amuse comme un petit fou à essayer différentes formes png que je glane sur le net.

    Maintenant, le composant est très très basic et n'a qu'une propriété PNGImage. De plus j'ai pas fait beaucoup de vérification et de validation.
    C'est juste une ébauche. J'imagine qu'il faudra bien libérer des bitmaps par ci par là non??

    J'attache la base du compo

    Utilisation:

    On fout le compo sur une form
    On affecte un png dans la proprité PNGPicture
    On execute la procedure pngform1.show dans le formcreate de la form1

  19. #79
    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
    Je trouve que tu aurais pu laisser l'en-tête de la source, respect de l'auteur, merci
    Fichiers attachés Fichiers attachés
    De retour parmis vous après 10 ans!!

  20. #80
    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
    Je viens de trouver le moyen d'éviter de devoir redéssiner les controls...
    En fait, PNGForm passe au 1er plan avec l'emplacement des controls transparent.
    Je posterai le code tout à l'heure, à+
    De retour parmis vous après 10 ans!!

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

Discussions similaires

  1. [GRAPH] [GCHART] Couleur des contours des barres d'histogramme
    Par mohamed_ dans le forum ODS et reporting
    Réponses: 2
    Dernier message: 02/09/2011, 10h18
  2. Réponses: 3
    Dernier message: 30/06/2009, 19h16
  3. Réponses: 2
    Dernier message: 23/01/2008, 23h56
  4. Réponses: 19
    Dernier message: 20/12/2006, 10h15
  5. Gestion des majuscules des miniscules des accent
    Par issam16 dans le forum Access
    Réponses: 2
    Dernier message: 13/07/2006, 14h21

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