Make +y UP, Move Origin C# System.Drawing.Graphics

前端 未结 3 1565
礼貌的吻别
礼貌的吻别 2021-01-05 16:10

I want the origin to be at the center of my window.


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

.NET wan

相关标签:
3条回答
  • 2021-01-05 16:35

    Try creating the graphics object with a negative height. I don't know the C# library specifically, but this trick works in recent versions of GDI.

    0 讨论(0)
  • 2021-01-05 16:38

    One solution would be to use the TranslateTransform property. Then, instead of using the Point/PointF structs you could create a FlippedPoint/FlippedPointF structs of your own that have implicit casts to Point/PointF (but by casting them the coords get flipped):

    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 讨论(0)
  • 2021-01-05 16:42

    You can continue using ScaleTransform(1, -1) and reset the current transformation temporarily while drawing your text:

    // 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;
    
    0 讨论(0)
提交回复
热议问题