使用 ImageMagick.NET 提取多边形

本文关键字:多边形 提取 NET ImageMagick 使用 | 更新日期: 2023-09-27 18:33:04

我正在使用 ImageMagick.NET 使用坐标从图像中裁剪多边形。

大多数图像裁剪问题都依赖于使用 4 个点的矩形裁剪图像,但是我需要使用 4 到 8 个点来裁剪多边形。

使用以下代码创建蒙版和可绘制多边形以应用于源图像,但结果是我得到的与我期望的相反。

根据 http://www.imagemagick.org/Usage/compose/tables/In运算符应该得到我的结果,但它得到了图像的其余部分

        MagickImage image = new MagickImage(imagePath);
        MagickImage dest = new MagickImage(new MagickColor(Color.White), 1120, 450);
        MagickImage mask = new MagickImage(new MagickColor(Color.White), 1120, 450);
        mask.FillColor = new MagickColor(Color.Black);
        List<Coordinate> coordinates = new List<Coordinate>();
        coordinates.Add(new Coordinate(0, 0));
        coordinates.Add(new Coordinate(0, 300));
        coordinates.Add(new Coordinate(100, 300));
        coordinates.Add(new Coordinate(100, 450));
        coordinates.Add(new Coordinate(1120, 450));
        coordinates.Add(new Coordinate(1120, 150));
        coordinates.Add(new Coordinate(850, 150));
        coordinates.Add(new Coordinate(850, 0));
        mask.Draw(new DrawablePolygon(coordinates));

        MagickGeometry offset = new MagickGeometry(0,0,0,0);
        dest.Alpha(AlphaOption.Transparent);
        dest.ClipMask = mask;
        dest.Composite(image, offset, CompositeOperator.Out);
        dest.Write(@"C:'temp'test.png");

任何帮助将不胜感激

使用 ImageMagick.NET 提取多边形

看起来您为所需的解决方案错误地创建了掩码。您应该切换黑白颜色:

List<Coordinate> coordinates = new List<Coordinate>();
coordinates.Add(new Coordinate(0, 0));
coordinates.Add(new Coordinate(0, 300));
coordinates.Add(new Coordinate(100, 300));
coordinates.Add(new Coordinate(100, 450));
coordinates.Add(new Coordinate(1120, 450));
coordinates.Add(new Coordinate(1120, 150));
coordinates.Add(new Coordinate(850, 150));
coordinates.Add(new Coordinate(850, 0));
using (MagickImage image = new MagickImage(imagePath))
{
  using (MagickImage mask = new MagickImage(Color.Black, 1120, 450))
  {
    mask.FillColor = new MagickColor(Color.White);
    mask.Draw(new DrawablePolygon(coordinates));
    using (MagickImage dest = new MagickImage(Color.White, 1120, 450))
    {
      dest.Alpha(AlphaOption.Transparent);
      dest.Mask = mask;
      MagickGeometry offset = new MagickGeometry(0, 0, 0, 0);
      dest.Composite(image, offset, CompositeOperator.Out);
      dest.Write(@"D:'test.png");
    }
  }