gpt4 book ai didi

c# - 获取多个矩形的边界矩形

转载 作者:行者123 更新时间:2023-11-30 16:57:26 25 4
gpt4 key购买 nike

我在图像上最多有 4 个矩形,对于这些矩形中的每一个,我都知道它们的左上角 X、Y 坐标及其宽度、高度。我想创建一个 Int32Rect ,其尺寸从最左上角的矩形到最右下角的矩形。主要问题是您只能使用 x、y、width、height 参数创建 System.Windows.Int32Rect。我有什么想法可以用我目前已知的值(value)观来实现这一目标吗?

编辑:为了澄清,我想创建一个 Int32Rect ,它是我图像上所有其他“矩形”的尺寸。因此,一个大的 Int32Rect 从图像左上部分的“矩形”开始,延伸到图像右下部分的“矩形”。

下面是一些针对单个矩形执行此操作的代码:

var topLeftOfBox = new Point(centerOfBoxRelativeToImage.X - Box.Width/2,
centerOfBoxRelativeToImage.Y - Box.Height/2);
return new CroppedBitmap(originalBitmap, new Int32Rect(topLeftOfBox.X, topLeftOfBox.Y, Box.Width, Box.Height));

感谢大家的帮助和想法,我发现 Aybe 的答案最适合我。

最佳答案

您需要为每个矩形抓取 x/y 最小值/最大值,并根据这些值构建一个矩形:

using System.Linq;
using System.Windows;

internal class Class1
{
public Class1()
{
var rect1 = new Int32Rect(10, 10, 10, 10);
var rect2 = new Int32Rect(30, 30, 10, 10);
var rect3 = new Int32Rect(50, 50, 10, 10);
var rect4 = new Int32Rect(70, 70, 10, 10);

var int32Rects = new[] { rect1, rect2, rect3, rect4 };
var int32Rect = GetValue(int32Rects);
}

private static Int32Rect GetValue(Int32Rect[] int32Rects)
{
int xMin = int32Rects.Min(s => s.X);
int yMin = int32Rects.Min(s => s.Y);
int xMax = int32Rects.Max(s => s.X + s.Width);
int yMax = int32Rects.Max(s => s.Y + s.Height);
var int32Rect = new Int32Rect(xMin, yMin, xMax - xMin, yMax - yMin);
return int32Rect;
}
}

结果:

{10,10,70,70}

关于c# - 获取多个矩形的边界矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26488610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com