Pregunta

Quiero que el origen esté en el centro de mi ventana.

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

.NET quiere que esté en la esquina superior izquierda.

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

Dot net y yo estamos tratando de llevarnos bien ...

¿Alguien sabe cómo hacer esto en C # simplemente usando el objeto Graphics?

Graphics.TranslateTransform no lo hace, ya que deja las coordenadas invertidas. Combinar este Graphics.ScaleTransform (1, -1) tampoco es satisfactorio ya que eso hace que el texto aparezca al revés.

¿Fue útil?

Solución

Una solución sería usar la propiedad TranslateTransform. Luego, en lugar de usar las estructuras Point / PointF, puede crear sus propias estructuras FlippedPoint / FlippedPointF que tengan conversiones implícitas en Point / PointF (pero al emitirlas, las coordenadas se voltean):

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

Otros consejos

Puede continuar usando ScaleTransform (1, -1) y restablecer la transformación actual temporalmente mientras dibuja su texto:

// 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;

Intente crear el objeto gráfico con una altura negativa. No conozco específicamente la biblioteca de C #, pero este truco funciona en versiones recientes de GDI.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top