Je dessine une série de points en utilisant la classe Graphics. Je lis d'un tableau de points. Pour une raison quelconque, l'image rendue est à l'envers (retournée sur l'axe X). Existe-t-il un moyen simple de dire à la classe Graphics de dessiner "à l'envers"? Merci beaucoup.C# GDI Inverser les graphiques retournés sur l'axe X
Répondre
Il faut noter que l'orientation par défaut ou la direction de graphiques dans la plupart dessin les systèmes vont du haut de l'affichage au bas de l'écran. Pour compenser cela, vous devez connaître la hauteur prévue de votre zone de visualisation, puis soustraire vos coordonnées de cette hauteur. Cela inversera l'orientation et définira vos chiffres par rapport au bas de la zone de visualisation. Imaginons que vous ayez deux points spécifiés comme < x, y > et une fenêtre de 300 (w) x 200 (h).
{{0, 0}, {100, 200}}
Lorsque dessin dans la zone d'affichage, < x, y > seront mises en correspondance avec < x, 200 y >. Cela nous donne les points suivants.
{{0, 200}, {100, 0}}
Il existe également des mécanismes pour changer le mode de mappage des coordonnées de style cartésien, qui sera probablement correspondre à vos données source, mais est généralement évité car il remapper tout ce qui a déjà compensé l'orientation par défaut.
La fonction SetMapMode() dans Windows peut être utilisée à cette fin si c'est ce que vous souhaitez vraiment.
est ici la signature P/Invoke de la fonction. (De pinvoke.net: setmapmode (gdi32))
[DllImport("gdi32.dll")]
static extern int SetMapMode(IntPtr hdc, int fnMapMode);
modifier:
Il y a une autre façon d'y arriver, que j'ai personnellement pas essayé.
Graphics.TransformPoints Method @ MSDN
Cela vous permet de spécifier les systèmes de coordonnées et l'objet Graphics fera le mappage pour vous. Dans votre cas, vous pouvez appeler CoordinateSpace.World ou CoordinateSpace.Page comme premier argument et CoordinateSpace.Device comme deuxième argument.
TransformPoints rend la vie simple. MERCI! – GDIHelp
Il semble que ce ne soit pas à l'envers, mais comme si on lui donnait les coordonnées à l'envers.
Vérifiez que vous attendez des coordonnées avec la bonne origine. 0,0 devrait être par défaut en haut à gauche de votre écran.
EDIT: Vous devriez être en mesure de compenser en changeant Y sur chaque point que vous dessinez à utiliser la formule Y = hauteur - Y.
"retourné sur l'axe X" et "inversé" signifie que l'image est reflétée * sur * l'axe X (* le long de l'axe Y) – schnaader
oops. enlevé mon commentaire. Je ne sais pas pourquoi je l'ai mal lu. – meklarian