您可以通过使用GraphicsPath
如下做到这一点:
- 多边形添加到路径。
- 将矩形添加到包含要“反转”的区域的路径中。
- 使用
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
使其反转)。
你可以做一个2通行动。意思是第一遍,创建这个位图。第二遍:当生成的位图中的像素为黑色时,将像素填充到其他位图中。 –
使用白色背景和填充多边形黑色有问题吗? – Piglet
我还没有尝试过,但可以尝试在多边形点中包含位图的边角。如果它起作用,它将会使多边形内的所有东西都变成外部效果,并且会产生相同的结果。 – Abion47