使用另一个GraphicsPath剪切GraphicsPath

时间:2011-08-31 10:46:56

标签: c# gdi+ gdi

如何使用其他System.Drawing.Drawing2D.GraphicsPath剪辑GraphicsPath以获取新的GraphicsPath

注1:SetClip()可以是一个完整的System.Drawing.Graphics对象,但这里需要的是某种相交的GraphicsPath来获取另一个GraphicsPath。

注2:此处讨论的方法(Intersecting GraphicsPath objects)返回一个区域。这里我们期待一个GraphicsPath

1 个答案:

答案 0 :(得分:1)

我快速去了解,我得到的最接近的是:

var region = new Region(gp1);
region.Intersect(gp2);

var gpResult = new GraphicsPath();
gpResult.AddRectangles(region.GetRegionScans(new Matrix()));
gpResult.CloseAllFigures();

using (var br = new SolidBrush(Color.LightYellow))
{
    e.Graphics.FillPath(br, gpResult);
    //e.Graphics.DrawPath(Pens.Black, gpResult);
}

这个问题是GetRegionScans()会给你数千个矩形,而不仅仅是线条的不同点。取消注释DrawPath方法以查看我的意思。

有一个用于管理裁剪的开源库,它似乎相当活跃here(通过this Stackoverflow question找到)。

我对此没有任何经验,但看起来能够做到你想做的事。