【问题标题】:Cut rectangle area from given image从给定图像中剪切矩形区域
【发布时间】:2014-04-19 18:37:39
【问题描述】:

我有以下问题:

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

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 中的位置。矩形可以具有相同的面积,甚至可以具有完全相同的形状,但在图像上的不同位置。

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

【问题讨论】:

    标签: c# image


    【解决方案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);
    

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

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

    现在您的裁剪图像位于“裁剪”处

    别忘了处理图形!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-16
      • 2013-11-23
      • 1970-01-01
      • 1970-01-01
      • 2017-06-01
      • 2012-01-05
      • 2015-08-20
      • 1970-01-01
      相关资源
      最近更新 更多