c# fill everything but GraphicsPath

2019-06-24 08:50发布

问题:

I have some code that looks like that:

GraphicsPath p = new GraphicsPath();
// Add some elements to p ...
// ...

g.FillPath(bgBrush, p);
// where g : Graphics and bgBrush : Brush

Which results in something that looks like this:

### |
  ##|
 ## |

How can I fill the exact complement of the path?

Desired output:

   #|
##  |
#  #|

回答1:

I'm surprised no one answered so far - the solution is pretty simple. Just add a Rectangle to the path and everything inside gets reverted.

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);
        Graphics g = e.Graphics;
        g.Clear(BackColor);

        GraphicsPath p = new GraphicsPath();
        // add the desired path
        p.AddPie(100, 100, 100, 100, 0, 270);

        // add the rectangle to invert the inside
        p.AddRectangle(new Rectangle(50, 50, 200, 200));

        g.FillPath(Brushes.Black, p);
    }


标签: c# graphics path