【问题标题】:How to create a RectangleF using two PointF?如何使用两个 PointF 创建一个 RectangleF?
【发布时间】:2010-11-05 06:21:45
【问题描述】:

我创建了两个点,就像一条线。我想将其转换为矩形。 我该怎么做?

例如,这就是我画线的方式。但我希望它是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();
    }

【问题讨论】:

    标签: c# gdi+


    【解决方案1】:

    怎么样:

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

    基本上,这确保您确实将左上角显示为“开始”,即使用户创建了从左下角到右上角的一条线。

    【讨论】:

      【解决方案2】:

      使用 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;
          }
      

      【讨论】:

        猜你喜欢
        • 2012-03-13
        • 2013-03-28
        • 1970-01-01
        • 2017-01-29
        • 1970-01-01
        • 2014-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多