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

bob*_*obo 6 c# drawing system.drawing

我希望原点位于我窗口的中心.


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

.NET希望它位于左上角.


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

点网和我正在努力相处..

有没有人知道如何在C#中使用Graphics对象?

Graphics.TranslateTransform不会这样做,因为它会使坐标翻转过来.结合这个Graphics.ScaleTransform(1,-1)并不令人满意,因为这会使文本显示为颠倒.

Jon*_*son 3

一种解决方案是使用 TranslateTransform 属性。然后,您可以创建自己的 FlippedPoint/FlippedPointF 结构,而不是使用 Point/PointF 结构,该结构具有对 Point/PointF 的隐式转换(但通过转换它们,坐标会翻转):

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); }
}
Run Code Online (Sandbox Code Playgroud)