您可以使用
Magick::DrawablePolygon
和
Magick::Image.composite
的组合。
创建一个新的蒙版图片,并绘制 n-gon 形状。
Magick::Image mask;
mask.draw( Magick::DrawablePolygon( std::list<Magick::Coordinate> ) );
然后只需将遮罩应用于目标图像,并组合现有的源图像。
Magick::Image dest;
dest.composite( Magick::Image, Magick::Geometry, Magick::CompositeOperator );
例子:
#include <iostream>
#include <Magick++.h>
int main(int argc, const char ** argv)
{
Magick::InitializeMagick(*argv);
Magick::Image mask( Magick::Geometry(120,120), Magick::Color("white"));
Magick::Image dest( Magick::Geometry(120,120), Magick::Color("white"));
Magick::Image source;
source.read("rose:");
source.resize(Magick::Geometry(200,120));
mask.fillColor("black");
std::list<Magick::Coordinate> points;
points.push_back(Magick::Coordinate(10, 10));
points.push_back(Magick::Coordinate(10, 50));
points.push_back(Magick::Coordinate(30, 50));
points.push_back(Magick::Coordinate(30,100));
points.push_back(Magick::Coordinate(75,100));
points.push_back(Magick::Coordinate(75, 30));
points.push_back(Magick::Coordinate(60, 30));
points.push_back(Magick::Coordinate(60, 10));
mask.draw( Magick::DrawablePolygon(points) );
dest.clipMask(mask);
Magick::Geometry offset(0,0,0,0);
dest.composite( source, offset, Magick::OverCompositeOp );
dest.write("n-gon.png");
}
![n-gon](https://istack.dev59.com/3t90G.webp)