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

标签 c# rectangles

我在图像上最多有 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/

相关文章:

c# - 受限环境中的分析

c - 我正在尝试向每个新行添加数字

java - 从鼠标 x 和 y 创建的矩形未使用 Graphics2D.translate 进行平移(其他矩形会平移)

c# - ITextSharp : Text not wrapping around image within cell

c# - 分块读取非常大的文件的最有效方法是什么?

javascript - 传单 map 上其他矩形中矩形的百分比

python - 单击鼠标绘制矩形 [Python]

html - 创建背景斜体阴影

c# - 共享资源的结构与静态类?

c# - Xamarin.Forms 缓存图像