从给定的图像中剪切矩形区域
本文关键字:区域 图像 | 更新日期: 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);
现在你有你的裁剪图像在"裁剪"
别忘了处理图形!!