Question

Je veux que l'origine soit au centre de ma fenêtre.

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

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

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

Dot Net et moi essayons de nous entendre ..

Quelqu'un sait-il comment faire cela en C # en utilisant simplement l'objet Graphics?

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

Était-ce utile?

La solution

Une solution serait d’utiliser la propriété TranslateTransform. Ensuite, au lieu d'utiliser les structures Point / PointF, vous pouvez créer vos propres structures FlippedPoint / FlippedPointF comportant des conversions implicites vers Point / PointF (mais en les lançant, les coordonnées sont inversées):

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); }
}

Autres conseils

Vous pouvez continuer à utiliser ScaleTransform (1, -1) et réinitialiser temporairement la transformation en cours tout en dessinant votre 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;

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top