cs_mastoc
Messages postés26Date d'inscriptionmardi 22 février 2005StatutMembreDernière intervention 3 mars 2009
-
15 janv. 2008 à 11:02
cs_mastoc
Messages postés26Date d'inscriptionmardi 22 février 2005StatutMembreDernière intervention 3 mars 2009
-
27 févr. 2008 à 09:31
Une petite question sur la compatibilité entre GDI et GDI+ !^^
Voilà je travail actuellement sur un logiciel utilisant GDI + pour afficher un certains nombre de composant (la majorité dira t'on). Par contre certains autres composants utilisent encore GDI pour tout un tas de raison dont un certains nombre de fonctionnalité qui sont présente dans la bibliothèque de ce dernier et qui ne sont plus présente dans GDI+.
Un petit exemple avec les textes : GDI permet de modifier la largeur et la hauteur d'un texte. GDI+ ne permet plus que modifer la taille du texte. En gros il n'est plus possible de faire des transformation en largeur sur un texte sans passer sur une homothétie... J'ai donc gardé GDI pour dessinner les textes.
Le problème : Les textes sont dessinés sur un Device Context en GDI puis passé en Graphics pour GDI+. En gros pour faire cela on récupère le DC du Graphics GDI+ on trace le composant GDI et on release le DC pour signaler la fin du tracer. Cela fonctionne mais si l'on se rapproche du texte on remarque qu'il n'est pas vraiment nikel. En gros on a l'impression d'avoir écrit sur du papier buvard.
La question : Comment est-il possible d'éviter cette dégradation de l'image en gardant GDI et GDI+ ? Pourquoi cette dégradation ?
L'image est encore dégrader par le format de compréssion mais en gros autour du texte rouge il y a une sorte de halo noir. D'où sort-il ? En plus j'ai remarqué que suivant le zoom le halo disparaissait...
cs_mastoc
Messages postés26Date d'inscriptionmardi 22 février 2005StatutMembreDernière intervention 3 mars 2009 15 janv. 2008 à 12:44
Alors personne ne se lance ? J'ai pas vraiment trouvé de réponse mais sur MSDN. Le sujet est abordé sans réel conviction et sans de véritables réponses...
cs_mastoc
Messages postés26Date d'inscriptionmardi 22 février 2005StatutMembreDernière intervention 3 mars 2009 15 févr. 2008 à 16:49
Bon pas de réponses.
A priori j'ai peut être trouvé. En GDI il n'y a pas d'anti-aliasing.
La réponse est courte^^. Bon en fait sur le logiciel sur lequel je bosse (je n'ai pas assez d'expérience pour dire s'il fonctionne tous de la même façon) la transparence autour d'un objet est matérialisé par du noir. On a donc le texte qui est écrit sur un fond noir. A un moment donné l'ensemble des images qui doivent être rendu à l'écran son fusionner et c'est là que le détourage s'effectue.
Comme je l'ai expliqué plus haut je travail sur un Graphics GDI+ qui lui accepte l'anti aliasing.
Etant donné que les pixel noir apparaissent sur les parties du textes qui devrait subire un traitement anti-aliasing, je subodore qu'il s'agit d'un reste de fond noir servant à la transparence. GDI+ cherche à faire un traitement anti-aliasing et garde les pixels nécessaires de l'image d'origine. Comme en GDI il n'y a pas d'anti aliasing et bien il garde les pixels du fond noir servant à la transparence.
Voilà c'est assez simpliste comme explication et je n'ai pas encore la solution. Si qq'un connait ?
Vive les Moutons !
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_mastoc
Messages postés26Date d'inscriptionmardi 22 février 2005StatutMembreDernière intervention 3 mars 2009 27 févr. 2008 à 09:31
Attention je tiens à souligné que j'utilise GDI pour les textes (car plus souple) et qu'ensuite j'insére l'objet dans un Graphics GDI+. Donc le processus est le suivant pour le tracé du texte :
-> Récupération du Graphics ;
-> Récupération du Device context de ce Graphics ;
-> Dessin du texte en GDI dans le Device Context ;
-> Et je crois libération du Device Context.
Tout ceci fonctionne. En fait le problème semble se trouver un peu plus en aval.
Comme je l'expliquais GDI ne fait pas d'anti aliasing. Or GDI+ possède de l'anti aliasing. Mon texte est tracé sur un layer transparent et la transparence est représenté par un calque noir. Lorsque je veux fixer cette image à l'écran une fusion de tous les "calques" est effectué. A ce moment là les "calques" sont en GDI+ et je pense qu'à la fusion GDI + essaye d'appliquer l'antialiasing à un calque qui n'en a pas. D'où le halo noir autour des texte (le noir qui est la couleur de la transparence) précisément aux endroit où il aurait du y avoir de l'anti aliasing.
Je crois que c'est parceque il n'y a pas d'anti aliasing au départ sur les textes qu'ensuite durant la fusion apparraissent ces tâches noir.
Voici une image généré au cours de la fusion de 2 calques (il y en a 3 au totals chacun ayant un type de données différent).