Bonjour
Je fais des drawlines sur une image
Le resultat que j'obtiens est bizare : les traits ressemblent a des longs fuseaux plutot qu'une belle droite (comme une trace d'avion qui s'estompe)
Quelqu'un a déja eu ce problème ?
Bonjour
Je fais des drawlines sur une image
Le resultat que j'obtiens est bizare : les traits ressemblent a des longs fuseaux plutot qu'une belle droite (comme une trace d'avion qui s'estompe)
Quelqu'un a déja eu ce problème ?
Peut être en jouant avec le SmoothingMode ?
Merci Smyley
A l'origine je n'utilisais pas de Smoothing mode
Ensuite j'avais essayé l'anti-alias
Dans les deux cas j'ai le meme effet
Je me demande si ce n'est pas lié a l'usage d'un transformatrix
Mais si je dessine d'autres objets carré, cercles je n'ai pas de problème
J'ai constaté que certaines epaisseurs de trait ne posent pas de problème non plus
A mon avis c'est un probleme d'arrondi dans le rendering lié au transformmatrix et a l'épaisseur de trait
Voici l'image du résultat !
Salut Smyley
Je vais preparer aujourd'hui ou demain le bout de code utile
Avec AUSSI
1- Les parametres du Transformmatrix (pas evident car il est calculé a la volée)
2- Quelque coordonées produisant ce bel effet !
Salut Smiley
Voici un projet minimum que j'ai un peu bricolé pour extraire la partie signifiante de mon GROS projet !
Bon amusement !
Pourquoi ton pen ne fait que 0.00....04f ? enfin, j'ai vu un zoom après (mais je t'accorde, j'ai pas eu envie de chercher à comprendre )
Pour l'instant j'ai vu qu'on pouvais tricher comme ceci :
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Pen MyPen = new Pen(Color.DarkOrchid, 0.0004f); int k = 0; for (int i = 0; i < pA.Length; i++) { k = (i + 1); if (k >= pA.Length) k = 0; gPolAndPoi.DrawLine(MyPen, pA[k], pA[i]); gPolAndPoi.DrawLine(MyPen, pA[i], pA[k]); }
Salut Smiley
J'avais déja essayé cete tricherie c'est d'aileurs pour cela qu'il y a une boucle, sinon Drawlines est plus efficace
0.0004 c'est en raison de la matrice de transformation (qui a mon avis doit etre a l'origine du problème)
Mais si tu met 0.0001 l'effet disparait presque
0.0005, il est moins accentué
C'est donc vraiment amusant !
Salut Smyley
Généralement si je découvre une fuite, je prefere intervenir à l'origine plutot que de mettre des seaux en dessous et oublier le problème
Code : Sélectionner tout - Visualiser dans une fenêtre à part Mais au moins là ça marche, tu n'as plus tes trucs bizarres
Si j'utilise une matrice de transformation c'est pour pouvoir aficher mes coordonéés géographiques originales dans la proportion de l'ecran.
L'effet secondaire de cette matrice c'est ue les épaisseurs de trait suivent la meme transformation
Mais si "tout le monde" fait autrement, "personne" ne m'a encore dit comment !
En fait, pour faire plus sérieux, il y a des fois où c'est un bug ou une limitation du système utilisé. GDI+ n'est pas ce qu'il y a de mieux en matière de dessin et par exemple tu pourrai avoir des choses bien plus belles, performantes et pratiques si tu refaisait la même chose en utilisant WPF (qui intègre notamment des contrôles de zoom sans avoir besoin de jouer avec des Matrix bizarres).
La chose à laquelle j'aurai pensé serai justement de créer une image "taille réelle" et ensuite la réduire pour qu'elle tienne dans l'affichage. Là j'ai l'impression que tu fais le contraire et peut être que le Pen n'aime pas faire des traits aussi petits, donc faudrait voir si la même chose avec un Pen de 1 et un rétrécissement de l'image obtenu fait le même problème.
La chose à laquelle j'aurai pensé serai justement de créer une image "taille réelle" et ensuite la réduire pour qu'elle tienne dans l'affichage. Là j'ai l'impression que tu fais le contraire et peut être que le Pen n'aime pas faire des traits aussi petits, donc faudrait voir si la même chose avec un Pen de 1 et un rétrécissement de l'image obtenu fait le même problème.
Je pense qu'il y a un probleme de compréhension dans l'usage d'une matrice !!
La taille réelle, c'est par exemple la ville de Paris !!
Ce que tu propose ici ne peut evidement pas s'appliquer !!
GRRR.
Je parle pas de mettre Paris en bouteille (ça serait relativement complexe) mais regarde :
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 private void SetTransformMatrixFloat() { double offset_x = -2.5926395f; double offset_y = 51.1424498f; float offset_Xf = (float)offset_x; float offset_Yf = (float)offset_y; float scale_f = (float)10471.2041884817f; Matrix m = new Matrix(1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f); m.Translate(offset_Xf, offset_Yf, MatrixOrder.Append); m.Scale(scale_f, scale_f, MatrixOrder.Append); _transformF = m; }
Donc tu fais un scale de 10471.2041884817f pour obtenir une image qui fait une certaine taille. Mais à l'inverse tu pourrai essayer de faire une image plus grande (correspondant à ce scale) et ensuite la réduire.
Ou alors, tu met la ville de paris à l'échelle et ensuite tu trace tes traits directement en taille 1 sur l'image obtenue (et non pas avant le scale, ou du moins, tu scale les coordonnées, pas l'image, de manière à garder des traits de 1 (voir plus, mais pas moins)).
Mais plus ça va, plus je me dit que c'est affreux. Tu es obligé d'utiliser le fw 2.0 (pas le 3.0 ? )
Salut Smyley
J'utilise le FW 3.5
Bon effectivement avant d'utiliser le transformmatrix je m'amusais moi meme a calculer les offset, le ratio etc et puis dessiner
Ca marche aussi et dans ce cas comme le draw est libre de toute transformation implicite, je n'ai pas de probleme
Par contre le code il prends un coup !
Donc la question n'est pas comment bricoler pour eviter le probleme mais comprendre s'il est possible de l'éviter proprement tout en utilisant la matrice de transformation !
Ou accessoirement est il possible dans une matrice de transformation de dissocier les epaisseur de brush pen etc des coordonées de tracé ?
Là je sais pas, dès que j'ai eu besoin de faire des tracés un peut plus évolués que des gradient et rectangles arrondis, je suis passé à WPF (et c'est beaucoup mieux ...)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager