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

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

.NET希望它位于左上角。

______________>
| |
| |
| |
| |
V ____________ |

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

有谁知道仅使用Graphics对象就能在C#中做到这一点?

Graphics.TranslateTransform不会执行此操作,因为它会使坐标上下颠倒。组合此Graphics.ScaleTransform(1,-1)也不令人满意,因为这会使文本上下颠倒。

最佳答案

一种解决方案是使用TranslateTransform属性。然后,代替使用Point/PointF结构,您可以创建自己的FlippedPoint/FlippedPointF结构,这些结构具有对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); }
}

09-07 05:46