Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

c# fill everything but GraphicsPath

Tags:

c#

path

graphics

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:

   #|
##  |
#  #|
like image 297
Simon Ottenhaus Avatar asked Feb 27 '23 21:02

Simon Ottenhaus


1 Answers

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);
    }
like image 51
Simon Ottenhaus Avatar answered Mar 07 '23 01:03

Simon Ottenhaus