GDI+如何填充任意封区域?就像windows画笔中的油漆桶那样的功能?

来源:百度知道 编辑:UC知道 时间:2024/07/05 18:33:22
给出封闭区域内一点,填充区域(类似API中Floodfill()),要求可以使用透明色,期望:封装成函数funcfill(Image img,Point point(鼠标坐标在封闭区域内),Color border(边界颜色), Color fillcolor(填充颜色)),填充效率要高。
yatasoft的思路很好,但g.FillRegion(Brushes.Green, re); 是否会填充所有封闭区域呢?我所期望的是只填充某一坐标所在的封闭区域

就是说给出一点坐标,如果该坐标处于一个封闭区域就填充封闭区域,包括“回”字形区域

.net的Region可以实现你的要求,前提是这个封闭的区域点你要提供,比如你提供了100个点的区域通过线连接成封闭的,首先你要做个点集合pf,然后利用这个集合做参数创建一个GraphicsPath实例,在利用GraphicsPath实例做参数创建一个区域Region,接着可以使用Graphics实例的填充区域方法FillRegion,把你刚刚建立的区域做参数即可。方法演示下面来自网络,另外要自己写填充方法,这个只能请教别人了,呵呵。

PointF[] pf = new PointF[100];
byte[] bs = new byte[100];
for (int i = 0; i < 100; i++)
{
pf[i] = new PointF(yourXcoord, yourYcoord);
bs[i]=(byte)PathPointType.Line;
}
GraphicsPath gp = new GraphicsPath(pf,bs);
System.Drawing.Region re = new Region(gp);
g.FillRegion(Brushes.Green, re);

gp.Dispose();
re.Dispose();

能详细描述下“某一坐标所在的封闭区域”的意思吗?
这个方法就是填充整个封闭区域,只要是封闭的区域就可以