C#填充多边形的一侧

在c#中,我可以在位图图像中填充多边形,如下所示。

using (Graphics g = Graphics.FromImage(bitmap)) { g.FillPolygon(colorBrush, points.ToArray()); } 

使用FillPolygon后()

FillPolygon方法填充多边形内的像素,在这种情况下,白色像素和黑色像素保持不变。

现在,我想要与此操作相反。 这意味着,外部像素将被填充,内部像素将保持不变。 在这种情况下,黑色像素是外部像素。

编辑我需要这个,因为我要说,我有一个对象的二进制图像。 我需要用背景颜色(黑色)剪切像素,白色多边形内的像素将保持不变。

您可以使用GraphicsPath执行此操作,如下所示:

  1. 将多边形添加到路径中。
  2. 在路径中添加一个矩形,该路径包含您要“反转”的区域。
  3. 使用Graphics.FillPath()填充路径。

对于示例程序,创建一个默认的Windows窗体应用程序并覆盖OnPaint() ,如下所示:

 protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); var points = new [] { new PointF(150, 250), new PointF( 50, 500), new PointF(250, 400), new PointF(300, 100), new PointF(500, 500), new PointF(500, 50), }; using (var path = new GraphicsPath()) { path.AddPolygon(points); // Uncomment this to invert: // p.AddRectangle(this.ClientRectangle); using (var brush = new SolidBrush(Color.Black)) { e.Graphics.FillPath(brush, path); } } } 

如果你运行它(并调整窗口大小),你会在白色窗口内看到一个黑色的形状。

取消注释指示的行并运行程序,您将在黑色窗口内看到白色形状(即添加将其反转的ClientRectangle )。