2017-04-03 83 views
1

在c#中,我可以在一个位图图像中填充多边形,如下所示。C#填写多边形的一面

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

After Using FillPolygon()

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

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

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

+0

你可以做一个2通行动。意思是第一遍,创建这个位图。第二遍:当生成的位图中的像素为黑色时,将像素填充到其他位图中。 –

+0

使用白色背景和填充多边形黑色有问题吗? – Piglet

+0

我还没有尝试过,但可以尝试在多边形点中包含位图的边角。如果它起作用,它将会使多边形内的所有东西都变成外部效果,并且会产生相同的结果。 – Abion47

回答

1

您可以通过使用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使其反转)。

+0

替换多边形外的像素,这正是我所需要的。开箱即用。谢谢。 – Ultraviolet