GDI / GDI+

cs_mastoc
Messages postés
26
Date d'inscription
mardi 22 février 2005
Statut
Membre
Dernière intervention
3 mars 2009
- 15 janv. 2008 à 11:02
cs_mastoc
Messages postés
26
Date d'inscription
mardi 22 février 2005
Statut
Membre
Derniè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 ?

capture d'écran :
http://imageshack.us

(le lien direct ici : http://img214.imageshack.us/img214/1424/capture01pl1.jpg).

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...

Voilà j'espère que quelqu'un aura une solution.

Merci

Vive les Moutons !

6 réponses

cs_mastoc
Messages postés
26
Date d'inscription
mardi 22 février 2005
Statut
Membre
Derniè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...

Vive les Moutons !
0
cs_mastoc
Messages postés
26
Date d'inscription
mardi 22 février 2005
Statut
Membre
Dernière intervention
3 mars 2009

15 janv. 2008 à 16:38
Je suis toujours à la recherche de réponses^^. C'est un peu urgent c'est pour cela que je relance régulièrement le sujet.

Vive les Moutons !
0
cs_mastoc
Messages postés
26
Date d'inscription
mardi 22 février 2005
Statut
Membre
Dernière intervention
3 mars 2009

16 janv. 2008 à 16:59
Bon ok je reformule ma demande. Est ce que qq sait dans quelle mesure il pourrait y avoir des problèmes entre GDI et GDI+ pour l'affichage ?

Vive les Moutons !
0
cs_mastoc
Messages postés
26
Date d'inscription
mardi 22 février 2005
Statut
Membre
Derniè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 !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ToutEnMasm
Messages postés
590
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
18 septembre 2021
3
26 févr. 2008 à 15:37
C'est toujours un peu désolant de voir une question sans réponse.
Je me lance.


Je n'ai pas l'impression d'écrire sur du papier buvard avec gdi + et on peut modifier du texte dessiné avec gdi +.


Un rectangle est défini dans gdi+ et c'est cela que l'on déforme et donc le texte suit la déformation.


Un petit exemple de papier buvard avec gdi+ pourrait peut être éclairer la question ?
0
cs_mastoc
Messages postés
26
Date d'inscription
mardi 22 février 2005
Statut
Membre
Derniè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).

Vive les Moutons !
0