2014-12-03 32 views
0

我使用ImageMagick.NET從圖像使用座標裁剪多邊形。使用ImageMagick.NET提取多邊形

大多數圖像裁剪問題依賴於使用4個點使用矩形裁剪圖像,但是我需要使用4到8個點之間的裁剪多邊形。

我使用下面的代碼來創建一個蒙版和一個可繪製的多邊形應用到源圖像,但結果是,我得到的是我期望的逆。

根據http://www.imagemagick.org/Usage/compose/tables/了在運營商應該把我的結果,而是其獲取圖像的剩餘

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

任何幫助,將不勝感激

回答

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