【问题标题】:Using ImageMagick.NET to extract a polygon使用 ImageMagick.NET 提取多边形
【发布时间】:2015-02-01 15:00:37
【问题描述】:

我正在使用 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");

任何帮助将不胜感激

【问题讨论】:

    标签: c# imagemagick crop


    【解决方案1】:

    您似乎为所需的解决方案错误地创建了掩码。你应该切换黑白颜色​​:

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

    【讨论】:

      猜你喜欢
      • 2020-04-04
      • 2014-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-01
      • 2013-03-02
      • 2018-11-05
      • 1970-01-01
      相关资源
      最近更新 更多