Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

GDI, GDI+ et Alphablendig

4 réponses
Avatar
JM
Bonjour

Voila, je veux afficher un polygone (plein) de 570 sommets dans un
rectangle de 1000*800 (à la louche) en utilisant un effet de transparence.

GDI+ :
C'est par là que j'ai commencé car très facile à mettre en oeuvre, il
suffit d'utiliser FillPolygone, avec un SolidBrush

GDI :
- Je crée un compatibleDC que j'appelle AlphaDC
- Je copie mon rectangle dans AlphaDC
- J'utilise la fonction Polygon (avec un solid brush et le même momde de
remplissage que GDI+) toujours dans AlphaDC
- Puis j'utilise AlphaBlend pour tout balancer à l'écran.

Donc pas mal de copies en fait.

Et là, grosse surprise.

Ma routine GDI éclate complètement la fonction GDI+, d'un facteur 6 ou 7.

J'aurais pourtant cru que GDI+, étant plus récent, était au moins aussi
performant que GDI ?!?

Vous avez un début d'explication?

4 réponses

Avatar
Christian ASTOR
JM wrote:

Ma routine GDI éclate complètement la fonction GDI+, d'un facteur 6 ou 7.

J'aurais pourtant cru que GDI+, étant plus récent, était au moins aussi
performant que GDI ?!?

Vous avez un début d'explication?



Oui, c'est connu et normal (et pas le but de GDI+)
GDI+ n'ayant pas de DDI utilise celle de GDI et ne profite pas tjrs de
l'accélération hard de GDI
Avatar
JM
Christian ASTOR a écrit :
JM wrote:



Oui, c'est connu et normal (et pas le but de GDI+)
GDI+ n'ayant pas de DDI utilise celle de GDI et ne profite pas tjrs de
l'accélération hard de GDI



Ah?
J'avais cherché à utiliser GDI+ suite à un livre que j'avais feuilleté
et qui affirmait que GDI+ était une évolution moderne du GDI, en plus mieux.

Bon, c'est pas grave, j'ai amélioré mes connaissances sur les HDC en
créant un dérivé de CDC qui gère la transparence sans se fouler
Avatar
adebaene
JM wrote:
Bonjour

Voila, je veux afficher un polygone (plein) de 570 sommets dans un
rectangle de 1000*800 (à la louche) en utilisant un effet de transparen ce.

GDI+ :
C'est par là que j'ai commencé car très facile à mettre en oeuvre , il
suffit d'utiliser FillPolygone, avec un SolidBrush

GDI :
- Je crée un compatibleDC que j'appelle AlphaDC
- Je copie mon rectangle dans AlphaDC
- J'utilise la fonction Polygon (avec un solid brush et le même momde de
remplissage que GDI+) toujours dans AlphaDC
- Puis j'utilise AlphaBlend pour tout balancer à l'écran.

Donc pas mal de copies en fait.

Et là, grosse surprise.

Ma routine GDI éclate complètement la fonction GDI+, d'un facteur 6 o u 7.

J'aurais pourtant cru que GDI+, étant plus récent, était au moins a ussi
performant que GDI ?!?



Plus récent oui, offrant plus de primitives de dessin oui, par contre
plus rapide, généralement non.

Ceci-dit, ton test de comparaison est "injuste" parce que dans un cas
(GDI), tu utilises un back-buffer et dans l'autre (GDI+) tu n'en
utilises pas. Qu'est ce que ca donne si tu utilises un back-buffer avec
GDI+ (gardes le même code, mais dessines juste dans un memoryDC et
fait un BitBlt à l'éran une fois que le dessin est fait) ??

Arnaud
MVP - VC
Avatar
JM
a écrit :

Plus récent oui, offrant plus de primitives de dessin oui, par contre
plus rapide, généralement non.

Ceci-dit, ton test de comparaison est "injuste" parce que dans un cas
(GDI), tu utilises un back-buffer et dans l'autre (GDI+) tu n'en
utilises pas. Qu'est ce que ca donne si tu utilises un back-buffer avec
GDI+ (gardes le même code, mais dessines juste dans un memoryDC et
fait un BitBlt à l'éran une fois que le dessin est fait) ??



Non, j'utilise déjà un memdc dans les deux cas.
Sinon c'est moche