Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#填充多边形的边_C#_Image Processing_Bitmap_Polygon - Fatal编程技术网

C#填充多边形的边

C#填充多边形的边,c#,image-processing,bitmap,polygon,C#,Image Processing,Bitmap,Polygon,在c#中,我可以在位图图像中填充多边形,如下所示 using (Graphics g = Graphics.FromImage(bitmap)) { g.FillPolygon(colorBrush, points.ToArray()); } FillPolygon方法填充多边形内部的像素,在这种情况下,白色像素和黑色像素保持不变 现在,我想要的是与这个操作相反的结果。这意味着,外部像素将被填充,而内部像素将保持不变。在

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

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

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

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

编辑
我需要这个,因为我有一个物体的二值图像。我需要剪裁背景色(黑色)的像素,而白色多边形内的像素将保持不变。

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

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);
        }
    }
}
  • 将多边形添加到路径中
  • 向包含要“反转”的区域的路径添加矩形
  • 使用
    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
    将其反转)。

    您可以执行两次通过操作。表示第一次通过,创建此位图。第二步:当生成的位图中的像素为黑色时,填充其他位图中的像素。使用白色背景并将多边形填充为黑色有什么问题吗?我没有尝试过,但您可以尝试在多边形点中包含位图的角点。如果它起作用,它将使多边形内的所有东西都变为外部,并产生相同的结果。这里,只考虑白色像素是像素,我不能改变。现在我需要用一种特定的颜色替换多边形外的像素,这正是我所需要的。开箱即用。谢谢