我创建了两个点,就像一条线。我想将其转换为矩形。 我该怎么办?
例如,这是我绘制线条的方式。但我希望它是Rectangle
private PointF start, end;
protected override void OnMouseDown(MouseEventArgs e)
{
start.X = e.X;
start.Y = e.Y;
}
protected override void OnMouseUp(MouseEventArgs e)
{
end.X = e.X;
end.Y = e.Y;
Invalidate();
}
答案 0 :(得分:16)
怎么样:
new RectangleF(Math.Min(start.X, end.X),
Math.Min(start.Y, end.Y),
Math.Abs(start.X - end.X),
Math.Abs(start.Y - end.Y));
基本上,这确保您确实将左上角显示为“开始”,即使用户已经从左下角到右上角创建了一条线。
答案 1 :(得分:4)
使用FromLTRB的Jon答案的更清晰版本:
/// <summary>
/// Creates a rectangle based on two points.
/// </summary>
/// <param name="p1">Point 1</param>
/// <param name="p2">Point 2</param>
/// <returns>Rectangle</returns>
public static RectangleF GetRectangle(PointF p1, PointF p2)
{
float top = Math.Min(p1.Y, p2.Y);
float bottom = Math.Max(p1.Y, p2.Y);
float left = Math.Min(p1.X, p2.X);
float right = Math.Max(p1.X, p2.X);
RectangleF rect = RectangleF.FromLTRB(left, top, right, bottom);
return rect;
}