首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ImageMagick.NET提取多边形

使用ImageMagick.NET提取多边形
EN

Stack Overflow用户
提问于 2014-12-03 21:30:58
回答 1查看 1.3K关注 0票数 1

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

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

我使用下面的代码来创建一个掩码和一个可绘制的多边形来应用于源图像,但是结果是,我得到的是与我所期望的相反的结果。

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

代码语言:javascript
复制
        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");

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-19 13:05:59

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

代码语言:javascript
复制
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");
    }
  }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27282045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档