2009-06-23 7 views
5

Je veux que l'origine soit au centre de ma fenêtre.Faire + y UP, déplacer l'origine C# System.Drawing.Graphics

 

______________ 
| ^ | 
|  |  | 
|  o----->| 
|   | 
|____________| 

.NET veut que ce soit dans le coin supérieur gauche.

 

_____________> 
|   | 
|   | 
|   | 
|   | 
V____________| 

Dot net et moi essayons de nous entendre ..

Est-ce que quelqu'un sait comment faire cela en C# en utilisant simplement l'objet Graphics?

Graphics.TranslateTransform ne le fait pas car il laisse les coordonnées retournées. La combinaison de Graphics.ScaleTransform (1, -1) n'est pas non plus satisfaisante car cela fait apparaître le texte à l'envers.

Répondre

1

Une solution consisterait à utiliser la propriété TranslateTransform. Ensuite, au lieu d'utiliser les struct Point/PointF vous pouvez créer un struct FlippedPoint/FlippedPointF de votre propre qui ont des moulages implicites au point/PointF (mais en les jetant les coords se fâcher):

public struct FlippedPoint 
{ 
    public int X { get; set; } 
    public int Y { get; set; } 

    public FlippedPoint(int x, int y) : this() 
    { X = x; Y = y; } 

    public static implicit operator Point(FlippedPoint point) 
    { return new Point(-point.X, -point.Y); } 

    public static implicit operator FlippedPoint(Point point) 
    { return new FlippedPoint(-point.X, -point.Y); } 
} 
0

Essayez de créer l'objet graphique avec une hauteur négative. Je ne connais pas la bibliothèque C# spécifiquement, mais cette astuce fonctionne dans les versions récentes de GDI.

1

Vous pouvez continuer en utilisant ScaleTransform(1, -1) et réinitialiser temporairement la transformation en cours de dessin du texte:

// Convert the text alignment point (x, y) to pixel coordinates 
PointF[] pt = new PointF[] { new PointF(x, y) }; 
graphics.TransformPoints(CoordinateSpace.Device, CoordinateSpace.World, pt); 

// Revert transformation to identity while drawing text 
Matrix oldMatrix = graphics.Transform; 
graphics.ResetTransform(); 

// Draw in pixel coordinates 
graphics.DrawString(text, font, brush, pt[0]); 

// Restore old transformation 
graphics.Transform = oldMatrix; 
Questions connexes