从给定的图像中剪切矩形区域

本文关键字:区域 图像 | 更新日期: 2023-09-27 17:59:06

我有以下问题:

我有一个保存为:Image X;的图像和一个点列表。点定义如下:

public struct Point
{
    public int X;
    public int Y;
}

在列表(未排序)上有2个点。点表示图像上的跳线。这些绳索形成矩形。例如,如果跳线为:(0,0)和(1,1),则矩形边为:(,0)-(0,1)-)1,1)-(1,0)。

我想写一个方法,返回矩形所在的裁剪图像。在上面的例子中,裁剪的图像将是(0,0)-(0,1)/(1,1)-(1,0)边界内的所有图像。

有什么简单的实现方法的想法吗?

注意,我不知道矩形在图像X中的位置。矩形可以有相同的面积,甚至完全相同的形状,但在图像上的不同位置。

假设它可以在任何地方,但矩形不能以任何方式(全部或部分)在图像之外

从给定的图像中剪切矩形区域

首先,你需要得到最小角和最大角,一个简单的方法是:

//Having p1 and p2
Point min = new Point(Math.Min(p1.X, p2.X), Math.Min(p1.Y, p2.Y));
Point max = new Point(Math.Max(p1.X, p2.X), Math.Max(p1.Y, p2.Y));

一旦你有了最大值和最小值,你就可以为源构建一个矩形:

Rectangle srcRect = new Rectangle(min.X, min.Y, max.X - min.X, max.Y - min.Y);

然后创建一个矩形大小的位图:

Bitmap cropped= new Bitmap(srcRect.Width, srcRect.Height, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);

从图像创建Graphics对象:

Graphics g = Graphics.FromImage(bmp);

并绘制裁剪区域:

//Having source image SrcImg
g.DrawImage(SrcImage, new Rectangle(Point.Empty, srcRect.Size), srcRect, GraphicsUnit.Pixel);

现在你有你的裁剪图像在"裁剪"

别忘了处理图形!!