我有以下问题:
我将图片保存为: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中的位置。矩形可以具有相同的区域,甚至是完全相同的形状,但在图像的不同位置。
假设它可以是任何地方,但矩形不能以任何方式(整个或部分)在图像之外
答案 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);
现在你的裁剪图像处于“裁剪”状态
不要忘记处理图形!!