C#填充多边形的一侧

时间:2017-04-03 12:45:00

标签: c# image-processing bitmap polygon

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

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

After Using FillPolygon()

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

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

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

1 个答案:

答案 0 :(得分:1)

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

  1. 将多边形添加到路径中。
  2. 在路径中添加一个矩形,该路径包含您想要的区域"反转"。
  3. 使用Graphics.FillPath()填充路径。
  4. 对于示例程序,创建一个默认的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反转它。)