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. #1
    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 gestion des contours des png
    Hello,

    j'utilise les composants png ce qui me permet de charger n'importe quel type d'image sur une fiche, notamment le format png. J'utilise Delphi 7 Personnal.

    Si je met donc une image png sur ma form, cela donne un résultat impeccable à l'exécution. Les bords de l'image lissés sont respectés, c'est parfait.

    En revanche si j'utilise la fonction "TransparentColor=True" de la fiche avec, pour être sûr, une couleur non utilisé dans mon image (comme le fuschia par exemple) les contours de mon image sont déchirés, comme si la fiche ne respectait plus l'antialiasé naturel de mon image d'origine.

    Pourquoi ? Comment faire ? Faut-il se pencher sur GDi machin chose ?

    Merci

  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
    Regarde ce sujet, je suppose que c'est ce que tu veux obtenir :
    http://www.developpez.net/forums/sho...d.php?p=132045
    De retour parmis vous après 10 ans!!

  3. #3
    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 cool
    Citation Envoyé par Sub0
    Regarde ce sujet, je suppose que c'est ce que tu veux obtenir :
    http://www.developpez.net/forums/sho...d.php?p=132045
    Excellent, merci beaucoup !

  4. #4
    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
    Bonjour à tous,
    j'ai le meme problème.
    Mais malheursement je n'ai pas compris malgré les codes précédents.

    C'est à dire que moi aussi j'aimerais créer une form, avec comme fond, un PNG, mais ce PNG aurait une ombre. Donc je recontre le meme problème.

    Comment as tu procédé DarkChamallo ?


    merci

  5. #5
    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
    As-tu essayé le code donné dans ce post ?
    http://www.developpez.net/forums/sho...hp?p=132045#13
    De retour parmis vous après 10 ans!!

  6. #6
    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 oui mais...
    Je viens de lire le lien, Sub0, car finalement je suis revenu pour demander des précisions que justement ce lien ne mentionne pas.

    La personne remarque, tout comme moi, que toute la fiche disparaît pour ne laisser place qu'à la superbe image png.

    Mais comment faire lorsque l'on veut utiliser des boutons, memos, etc... ?

    Mon but est d'avoir un fond original antialiasé... comme fond de mon programme. Je ne cherche pas juste un beau splashscreen.

    Et là, zut le lien mentionné, Sub0, soulevait la question mais finalement c'est parti sur autre chose

    Comment faire, donc, pour n'appliquer ces lignes de codes uniquement à 2 ou 3 PNG présents sur ma fiche sans pour autant faire disparaître ...tous les objets standards présents (boutons, Edits, Shapes, etc...) ?


  7. #7
    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
    Citation Envoyé par illuzmax
    Comment as tu procédé DarkChamallo ?
    J'ai suivi les conseils de Sub0

  8. #8
    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
    A la fin du thread, en bas de la 2ème page, je donne une piste pour solutionner ce problème, et même si la solution peut vous sembler compliquer et fastidieuse à réaliser, il n'en est rien :
    http://www.developpez.net/forums/sho...d.php?p=143227
    Je ne vous promets rien, mais si j'ai quelques minutes de libre, je ferais une démo (probablement cette nuit), à+
    De retour parmis vous après 10 ans!!

  9. #9
    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
    Citation Envoyé par Sub0
    A la fin du thread, en bas de la 2ème page, je donne une piste pour solutionner ce problème, et même si la solution peut vous sembler compliquer et fastidieuse à réaliser, il n'en est rien :
    http://www.developpez.net/forums/sho...d.php?p=143227
    Je ne vous promets rien, mais si j'ai quelques minutes de libre, je ferais une démo (probablement cette nuit), à+
    C'est à dire faire une capture d'écran de mon programme en png ? Seulement vu tous les changements qui peuvent intervenir, ça va être une usine à capture cette affaire....

    En fait j'ai trouvé un ou deux post sur le web qui précise que ce n'est pas possible de mettre d'autres objets sur la form quand on utilise ce code

    Alors à moins de faire 2 forms qui se suivent l'une en dessous de l'autre .. Bah même ça j'ai pas réussi (la 2ème se décale jamais de manière synchro mais toujours après. C'était pas bête, hein ?

    la solution peut vous sembler compliquer et fastidieuse à réaliser, il n'en est rien
    heu... si c'est effectivement l'astuce des captures, j'ai du mal à le concevoir dans ma petite tête même si je comprends que c'est une idée pertinente... (parce que faire une capture de mes objets (shapes, edits, buttons, labels...) les fusionner avec 2 ou 3 png et en faire un gros png impeccable... là je veux bien manger mon chapeau (comme dirait Flairsou )

    Alors bonne nuit, ou plutôt, bon courage

  10. #10
    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
    Faire une capture d'écran (ou d'une région d'écran plutot) est très facile. Pour dessiner toi-même ton prog sur le bureau et pour la capture, il faut utiliser GetDc (DeviceContext). C'est ce procédé qui est utilisé pour réaliser cette loupe :
    http://jca.developpez.com/loupe.php

    Il faut aussi que tu possèdes le masque de transparence alpha et l'appliquer avec une fonction du genre MakeBlend() que tu trouveras dans cette démo :
    http://sub0.developpez.com/delphi/alpha.zip

    Malgré tout, je pense qu'une démo vous sera nécessaire... Reste à voir si je vais y parvenir...
    De retour parmis vous après 10 ans!!

  11. #11
    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
    Citation Envoyé par Sub0
    Faire une capture d'écran (ou d'une région d'écran plutot) est très facile. Pour dessiner toi-même ton prog sur le bureau et pour la capture, il faut utiliser GetDc (DeviceContext). C'est ce procédé qui est utilisé pour réaliser cette loupe :
    http://jca.developpez.com/loupe.php

    Il faut aussi que tu possèdes le masque de transparence alpha et l'appliquer avec une fonction du genre MakeBlend() que tu trouveras dans cette démo :
    http://sub0.developpez.com/delphi/alpha.zip

    Malgré tout, je pense qu'une démo vous sera nécessaire... Reste à voir si je vais y parvenir...
    Ok, merci à l'avance pour la démo

  12. #12
    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
    http://sub0.developpez.com/delphi/alphaform.zip

    Quand je vous disais que ce n'était pas si compliqué...
    Voici quelques explications : Le programme possède 4 TImages:
    • L'image opaque
    • Le masque alpha
    • La capture du bureau
    • L'image du résultat du mixage

    J'ai simplifié en utilisant un bitmap opaque et un masque alpha plutôt qu'une seule image png, puisqu'il est facile de les obtenir à partir d'un png... L'astuce : Seule l'image du résultat possède la propriété Visible à True et recouvre toute la form. De cette manière, les controls qui seront placés au dessus de cette image resteront visibles et accessibles. Si possible, mettez DoubleBuffered de ces controls à True afin d'éviter les scintillements.

    J'ai fait en sorte que la fenêtre soit ombragée; Notez que l'ombre n'est pas dessinée à l'extérieure de la form comme on pourrait croire. Pour obtenir un affichage suffisament rapide, il faudra éviter d'utiliser ce code avec des grandes fenêtres, à moins d'optimiser davantage les fonctions graphiques, avec de l'assembleur par exemple...

    Note: J'ai remarqué quelques bugs que je n'ai pas encore eu le temps de corriger : Il faut d'abord supprimer le focus de l'arrière-plan avant de capturer le bureau la 1ère fois. Il ne faut pas capturer sur la form, mais récupérer cette région de la capture précédente... Peut-être aussi que l'évènement WM_NCACTIVATE n'est pas approprié. En tous les cas, la capture ne fonctionne pas encore parfaitement. Et ya un autre bug lorsqu'on déplace la fenêtre hors du bureau (indice hors limite). Je vais regarder ça tout à l'heure...

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

  13. #13
    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
    - en enlevant les Autosize=True ! il ya un "carrément mieux" !
    Je détestais les BITMAP et les masks mais là je suis presque réconcilié !

    SAUF que dès qu'une autre fenêtre passe par-dessus la nôtre on revoit le bug d'affichage qui montre l'ancienne capture avant déplacement et donc ça fait tâche autour de la fiche

    - en utilisant TransparentColor ou Alphablend c'est presque bon même quand une autre fenêtre passe par dessus... mais ça donne un effet aquatique, comme si la zone de la fiche était sous l'eau (ce qui passe dessous subi un "flou de bougé") alors pourquoi pas si le thème du soft que l'on veut faire est Capitaine Némo et les fonds Marins

    Pour l'indice hors limite, effectivement... Sauf si on vire de l'évenement onmousedown le code :

    MakeBlend(
    Opaque.Picture.Bitmap,
    Final.Picture.Bitmap,
    Desktop.Picture.Bitmap,
    Alpha.Picture.Bitmap);

    En revanche pour des raisons pratiques j'utilise les PNG,
    je n'ai pas pigé l'astuce pour déterminer l'alphamachin...
    Que faut-il adapter pour qu'un simple PNG utilise ce code ?

    Thankyoux

  14. #14
    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
    J'ai déjà résolu le problème de l'indice hors limite en ajoutant les fonctions Min et Max aux coordonnées de mixage du masque...
    Par contre, je bute sur le problème d'affichage. Je regarderais ça ce soir, en attendant, si d'autres membres veulent s'y frotter, n'hésitez pas !

    http://sub0.developpez.com/delphi/alphaform.zip
    De retour parmis vous après 10 ans!!

  15. #15
    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
    Bon, à force de triturer j'arrive à avoir quelque chose de potable sauf que lorsque la fenêtre n'a plus le focus elle subit le bug (contour de la capture d'écran initiale autour de la fiche) lequel est corrigé en quelques millisecondes si on reclique sur la fiche...

    Je me demande quand même si ça ne vient pas du fait qu'on utilise des bitmap... ?

  16. #16
    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 te rassure, les bitmaps n'ont rien à voir avec notre bug. Le problème provient uniquement du fait que la capture de l'écran doit être réalisée avant que la form prenne le focus et soit visible, et du coups, on restaure un arrière-plan "focusé" alors qu'il ne devrait pas l'être, et des fois on capture le bureau avec notre form lorsqu'on donne le focus à une autre fenêtre. Selon moi, la solution est dans le choix de l'évènement qui déclenche la capture du bureau... ou plutot la méthode, puisqu'il faut capturer le bureau sans que soit affichée notre form. C'est là que le problème se situe. Je suis en train de chercher la solution.
    De retour parmis vous après 10 ans!!

  17. #17
    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
    Solution débile : mettre un timer qui pompe les ressources systèmes à 100% pour être sûr que les captures ne s'échaperont pas

    Ooops, Pardon

    Le plus dur pour moi c'est que je ne peux avoir que des intuitions et des déductions en fonction de ce qui existe déjà... pour le reste c'est assez frustrant car on sait que c'est possible, mais comment...

  18. #18
    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
    Est-ce qu'un système de 2 forms (ou thread machin chose) pourrait être une piste ? La première serait celle qu'on triture depuis un bail et la deuxième serait invisible et surveillerait si la première prend ou perd le focus ?

  19. #19
    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
    Il faut gérer les situations suivantes :
    • Le déplacement de la form sur tout le bureau; Il faut arriver là à capturer le bureau sans aucun focus et sans que notre form soit affichée.
    • Une autre application prend le focus et notre form peut rester affichée entièrement ou partiellement. La capture est conservée intacte jusqu'à que...
    • ...notre form reprend la main et il faut de nouveau capturer le bureau sans aucun focus et sans que notre form soit affichée avant de pouvoir la rendre visible.
    De retour parmis vous après 10 ans!!

  20. #20
    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
    Oué, c'est c'que j'me dit depuis hier soir mais moi j'ai pas la science pour faire ça

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 6 12345 ... DernièreDernière

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