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

时间:2014-04-19 18:37:39

标签: c# image

我有以下问题:

我将图片保存为:Image X;和点列表。 point定义如下:

public struct Point
{
    public int X;
    public int Y;
}
列表上的

(没有排序)有2个点。点表示图像上的线。这些绳索定义了一个矩形形状。例如,如果线是:(0,0)和(1,1)那么矩形边是:(0,0) - (0,1) - (1,1) - (1,0)。

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

任何有关实现它的简单方法的想法?

请注意,我无法知道矩形在图像X中的位置。矩形可以具有相同的区域,甚至是完全相同的形状,但在图像的不同位置。

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

1 个答案:

答案 0 :(得分:1)

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

//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);

然后使用rect size创建一个位图:

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);

现在你的裁剪图像处于“裁剪”状态

不要忘记处理图形!!