Je dessine un graphique sur une commande, mais 0,0 se trouve dans le coin supérieur gauche du contrôle. Y at-il un moyen de retourner les coordonnées de sorte que 0,0 est dans le coin inférieur gauche du contrôle?Déplacer les coordonnées lors du dessin à contrôler
Répondre
Si vous utilisez WinForms, vous trouverez peut-être que vous pouvez faire pivoter l'axe Y à l'aide Graphics.ScaleTransform:
private void ScaleTransformFloat(PaintEventArgs e)
{
// Begin graphics container
GraphicsContainer containerState = e.Graphics.BeginContainer();
// Flip the Y-Axis
e.Graphics.ScaleTransform(1.0F, -1.0F);
// Translate the drawing area accordingly
e.Graphics.TranslateTransform(0.0F, -(float)Height);
// Whatever you draw now (using this graphics context) will appear as
// though (0,0) were at the bottom left corner
e.Graphics.DrawRectangle(new Pen(Color.Blue, 3), 50, 0, 100, 40);
// End graphics container
e.Graphics.EndContainer(containerState);
// Other drawing actions here...
}
Vous ne devez inclure begin/conteneur appelle de fin si vous voulez faire le dessin supplémentaire en utilisant le système de coordonnées régulier aussi. Plus d'informations sur les conteneurs graphiques est available on MSDN.
Comme mentionné par Tom dans les commentaires, cette approche nécessite que la valeur Height
soit disponible avec une valeur correcte. Si vous essayez ceci et que vous ne voyez rien, assurez-vous que la valeur est correcte dans un débogueur.
Vous devez également ajouter une traduction pour que cela fonctionne correctement. – Eric
Merci Eric. J'ai mis à jour ma réponse et j'ai inclus des informations sur l'utilisation de conteneurs graphiques pour isoler ces transformations des autres changements. –
Ne travaillait pas pour moi. Je ne suis pas encore un wiz WinForms. Il s'avère que "Height" ne correspond pas au contrôle actuel. J'ai appelé cela dans mon panel. On ne peignait rien. Mentionner que vous supposez que vous dessinez sur le formulaire lui-même pourrait sauver un peu de temps aux autres, car cela aurait pu me faire gagner du temps de débogage;) – Tom
Non, mais en utilisant les propriétés Size
(ou Height
) du contrôle, il est facile de calculer les coordonnées inversées: Il suffit de dessiner à Height-y
.
Pas que je sache mais si vous utilisez (x, Control.Height-y) vous obtenez le même effet.
bref pas, si je dessine sur les contrôles beaucoup j'ai quelques fonctions qui me aident:
Point GraphFromRaster(Point point) {...}
Point RasterFromGraph(Point point) {...}
cette façon, je garde toute la conversion en un seul endroit, sans se soucier des choses comme y - this.Height
dispersés sur le code.
pourquoi le vote à la baisse? – Pondidum
est ici simple UserControl qui montre comment faire:
public partial class UserControl1 : UserControl
{
public UserControl1()
{
SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.DoubleBuffer, true);
InitializeComponent();
}
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.ScaleTransform(1.0F, -1.0F);
e.Graphics.TranslateTransform(0.0F, -(float)Height);
e.Graphics.DrawLine(Pens.Black, new Point(0, 0), new Point(Width, Height));
base.OnPaint(e);
}
}
- 1. Comment faire pour inverser les coordonnées lors du dessin dans le contexte?
- 2. Coordonnées tactiles absolues du Touchpad
- 3. Coordonner les coordonnées du cercle en Javascript
- 4. Définition de la couleur lors du dessin dans un NSImage
- 5. Taille du panneau de dessin
- 6. wxPython: Dessin à l'intérieur d'un ScrolledPanel
- 7. Comment contrôler les rechargements lors de l'utilisation du bouton de retour dans le navigateur?
- 8. Trouver les coordonnées géographiques actuelles du script Python
- 9. souris suivie du dessin en C#
- 10. Comment convertir les coordonnées de l'espace écran en coordonnées de l'espace image dans un PictureFox WinForms?
- 11. Division du dessin d'un élément GUI
- 12. comment obtenir les coordonnées UIImageView?
- 13. Dessin 3D, réglage du point de vue, réglage du point de vue!
- 14. comment contrôler le mouvement du curseur de datagridview en C#
- 15. Déplacer les éléments expirés?
- 16. Comment déplacer les pixels?
- 17. JFreeChart obtient les coordonnées de la souris
- 18. UITableViewCell Dessin personnalisé et animation lors de la saisie du mode Edition/Réorganisation
- 19. Vous cherchez un logiciel pour contrôler à distance iTunes à partir du PC
- 20. Déplacer les fichiers OS au début du disque
- 21. Comment faire pour empêcher ObjectDisposedException en C# lors du dessin et de l'application se termine
- 22. dessin sous les icônes sur le bureau
- 23. C++ Transformation de coordonnées OpenGL
- 24. Système de coordonnées CALayer
- 25. Déplacer les contrôles de connexion à la page d'accueil
- 26. Obtenir les coordonnées GPS de Samsung Intrepid
- 27. Firefox: Obtenir les coordonnées de la souris du coin supérieur gauche de la fenêtre
- 28. Service Web pour obtenir les coordonnées GPS
- 29. Comment obtenir les coordonnées de la souris lors d'un clic sur un contrôle?
- 30. Transformation de coordonnées (LL + élévation à WGS84)
Utilisez-vous WinForms ou WPF? Vous aimeriez peut-être mettre à jour les tags sur votre question. –