思路:
先将线框边界画出来,填充为白色。之后用glReadPixels函数得到某个像素点的颜色值。之后判断是否被填充过,或是否为边界颜色,如果没有被填充,就将其四个方向的像素点入栈再填充
void Boundaryfill (int seedx,int seedy)
{
CMyStack stk1;
long color=RGB(255,0,0); //填充颜色
long boundary_color=RGB(255,255,255); //边界颜色
unsigned char params[4]; //保存读取的一个像素点的颜色值
// Write your code here
dcpt p1;
p1.x=seedx;
p1.y=seedy;
stk1.push(p1);
int data[4][2] = { 0,1,0,-1,1,0,-1,0 };
while (!stk1.isEmpty())
{
dcpt f = stk1.getTop();
stk1.pop();
glColor3f(1.0,1.0,1.0);
glBegin(GL_POINTS);
glVertex2i(f.x, f.y);
glEnd();
for (int i = 0; i < 4; i++)
{
dcpt tmp = f;
tmp.x += data[i][0];
tmp.y += data[i][1];
glReadPixels(tmp.x, tmp.y, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, params);
long colortmp = RGB(params[0], params[1], params[2]);
if(colortmp!=color&&colortmp!=boundary_color)
{
stk1.push(tmp);
}
}
}
}