OVH Cloud OVH Cloud

Line pas belles en Win32

6 réponses
Avatar
Stephane Legras-Decussy
bonjour,

j'ai un problème de tracé de lignes en win32.

avec un pen de largeur >1, on obtient des lignes diagonales
plus larges que les lignes verticales ou horizontales. Visiblement
le pen est un carré.

comment obtenir un tracé correct ?

j'ai étudié ExtCreatePen associé à un path, qui pourrait apporter une
solution mais
la doc msdn n'est pas très claire à propos des mutiples flags possibles.

quelqu'un a-t-il la solution ?

Merci !

--

6 réponses

Avatar
Aurelien REGAT-BARREL
"Stephane Legras-Decussy" a écrit dans le message de news:
425147ef$0$18947$
bonjour,

j'ai un problème de tracé de lignes en win32.

avec un pen de largeur >1, on obtient des lignes diagonales
plus larges que les lignes verticales ou horizontales. Visiblement
le pen est un carré.

comment obtenir un tracé correct ?



Si j'ai bien compris tu veux faire de l'anti-aliasing. Tu peux faire ça avec
GDI+:
http://msdn.microsoft.com/library/en-us/gdicpp/GDIPlus/aboutGDIPlus/linescurvesandshapes/antialiasingwithlinesandcurves.asp

--
Aurélien REGAT-BARREL
Avatar
Stephane Legras-Decussy
Aurelien REGAT-BARREL a écrit dans le
message : 42518cf8$0$16513$

Si j'ai bien compris tu veux faire de l'anti-aliasing



non c'est pas ça. le probleme est tout bête, voir l'image :

http://cjoint.com/?efde3SsvJC

ce tracé est fait de deux LineTo avec un même pen de largeur 5, hors
la ligne verticale est clairement plus mince que la diagonale !

comment corriger ça ?
Avatar
Aurélien REGAT-BARREL
> non c'est pas ça. le probleme est tout bête, voir l'image :

http://cjoint.com/?efde3SsvJC

ce tracé est fait de deux LineTo avec un même pen de largeur 5, hors
la ligne verticale est clairement plus mince que la diagonale !

comment corriger ça ?



En faisant de l'anti-aliasing...

--
Aurélien REGAT-BARREL
Avatar
Stephane Legras-Decussy
Aurélien REGAT-BARREL a écrit dans le
message : 4252632f$0$12952$

En faisant de l'anti-aliasing...



hum... à mon sens, c'est plutot un probleme
de pen carré (forcement la diagonale d'un carré est plus grande que le coté)
au lieu d'un pen rond...

pour en avoir le coeur net, je vais coder mon propre LineTo avec
un motif rond.

merci pour réponse.
Avatar
Cyrille Szymanski
On 2005-04-05, Stephane Legras-Decussy wrote:

Aurélien REGAT-BARREL a écrit dans le
message : 4252632f$0$12952$

En faisant de l'anti-aliasing...



hum... à mon sens, c'est plutot un probleme
de pen carré (forcement la diagonale d'un carré est plus grande que le coté)
au lieu d'un pen rond...



Je viens de regarder l'image, c'est pas très net mais on dirait bien que
l'empreinte est carrée. Essaie d'utiliser un rond plutôt que de recoder un
lineto().

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/pens_1q0j.asp

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/brushes_9ak3.asp

--
Cyrille Szymanski
Avatar
Aurelien REGAT-BARREL
> hum... à mon sens, c'est plutot un probleme
de pen carré (forcement la diagonale d'un carré est plus grande que le
coté)
au lieu d'un pen rond...



Je ne comprends pas ce que tu veux dire par pen rond et carré. Un pen n'as
pas de forme, mais simplement une couleur, une largeur et un style. D'après
ce que je comprends tu veux essayer de dessiner des pixels ronds, mais un
pixel est comme il est, et c'est pas avec du code que tu vas changer ça.
L'antialiasing consiste à "mélanger" plusieurs couleurs dans le même pixel,
pour en quelque sorte partager ce pixel entre plusieurs dessins (dessiner
des "portions" de pixels).
Dans le lien que je t'ai donné, une image (zoomée) montre la différence
entre une diagonale avec et sans anti-aliasing. Fait ton propre test, ça
prend 10 minutes, ça peut te faire économiser 2 jours de développements
inutiles.

--
Aurélien REGAT-BARREL