[英]How do I create a border around a rectangle in an image(PIX) in Leptonica?
[英]How do I create a rectangle from two points?
我有两点,让我们说一个矩形的左上角和右下角,在 C++ .Net 中。 如何从 .net 中的这两点创建 System.Drawing.Rectangle 结构? 这应该很简单,我错过了什么吗?
Rectangle 构造函数只适用于给定的 Point 和 Size,并通过给出单独的整数值,我在这里不考虑。 给出两点是行不通的。
尺寸结构也不能以简单的方式从两点创建。 没有定义从另一个点减去一个点,它应该给出一个大小,我看不到其他函数可以做到这一点。
所以我必须自己编写函数? 它应该就在那里。
您可以轻松创建一个静态方法,将您的两个点转换为一个大小,然后让它调用接收一个点和一个大小的矩形的构造函数。
此答案采用 C# 语法,但您应该能够轻松将其转换为 C++/cli 语法。
public static Rectangle GetRectangle(Point topLeft, Point bottomRight)
{
var size = new Size(topLeft.X-bottomRight.X, topLeft.Y-bottomRight.Y);
return new Rectangle(topLeft, size);
}
另外:上面的原始答案将导致负大小
:
Point topLeft = new Point(0, 0);
Point bottomRight = new Point(100, 200);
Rectangle rect = GetRectangle(topLeft, bottomRight);
矩形的宽度为-100
; 所以应该是:
var size = new Size(bottomRight.X, bottomRight.Y-topLeft.Y);
或者甚至更好:如果您不想为这两点中的哪一个在左上角而烦恼:
public static Rectangle GetRectangle(Point p1, Point p2)
{
int left = Math.Min(p1.X, p2.X);
int right = Math.Max(p1.X, p2.X);
int top = Math.Min(p1.Y., p2.Y);
int bottom = Math.Max(p1.Y, p2.Y);
int width = right - left;
int height = bottom - top;
return new Rectangle(left, top, width, height);
}
为了让事情更容易理解,我一步一步地做到了这一点。 当然这可以优化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.