美文网首页程序员
OpenGL 区域种子填充

OpenGL 区域种子填充

作者: 青蘋02 | 来源:发表于2019-10-16 14:23 被阅读0次

用栈对递归算法进行优化,分为四个步骤:

1. 初始化。栈堆置空,将种子点(x,y)入栈。

2. 出栈,若栈空则结束,否则取栈顶元素(x,y),以y作为当前的扫描线。

3. 填充并确定种子所在区域。从当前点出发,左右两个方向进行填充,直到边界。

4. 确定新的种子,在左右边界中检查与当前扫描线上下相邻的两条扫描线。若存在未填充的像素,将最右像素作为种子压入栈。

主要的代码见下:~

void fill4(int x, int y)

{

int xl, xr, i;

bool tt;

while (!pp.empty()) pp.pop();

point pt;

pt.x = x;

pt.y = y;

pp.push(pt);

while (!pp.empty())

{

pt = pp.top();

pp.pop();

y = pt.y;

x = pt.x;

float color[3];

glReadPixels(x+1, y, 1, 1, GL_RGB, GL_FLOAT, color);

while (!is_equal(color, newcolor) && !is_equal(color, boundarycolor))

{

draw_a_point(x+1, y);

x++;

glReadPixels(x + 1, y, 1, 1, GL_RGB, GL_FLOAT, color);

glFlush();

}

xr = x - 1;

x = pt.x - 1;

glReadPixels(x, y, 1, 1, GL_RGB, GL_FLOAT, color);

while (!is_equal(color, newcolor) && !is_equal(color, boundarycolor))

{

draw_a_point(x, y);

x--;

glReadPixels(x-1, y, 1, 1, GL_RGB, GL_FLOAT, color);

glFlush();

}

xl = x + 1;

x = xl;

y = y + 1;

while (x <= xr)

{

tt = false;

glReadPixels(x, y, 1, 1, GL_RGB, GL_FLOAT, color);

while (!is_equal(color, newcolor) && !is_equal(color, boundarycolor))

{

tt = true;

x++;

glReadPixels(x, y, 1, 1, GL_RGB, GL_FLOAT, color);

}

if (tt)

{

pt.x = x -1;

pt.y = y;

pp.push(pt);

tt = false;

}

glReadPixels(x, y, 1, 1, GL_RGB, GL_FLOAT, color);

while ((is_equal(color, newcolor) || is_equal(color, boundarycolor)) && x <= xr)

{

glReadPixels(x, y, 1, 1, GL_RGB, GL_FLOAT, color);

x++;

}

}

x = xl;

y = y - 2;

while (x <= xr)

{

tt = false;

glReadPixels(x, y, 1, 1, GL_RGB, GL_FLOAT, color);

while (!is_equal(color, newcolor) && !is_equal(color, boundarycolor))

{

tt = true;

x++;

glReadPixels(x, y, 1, 1, GL_RGB, GL_FLOAT, color);

}

if (tt)

{

pt.x = x - 1;

pt.y = y;

pp.push(pt);

tt = false;

}

glReadPixels(x, y, 1, 1, GL_RGB, GL_FLOAT, color);

while ((is_equal(color, newcolor) || is_equal(color, boundarycolor)) && x <= xr)

{

glReadPixels(x, y, 1, 1, GL_RGB, GL_FLOAT, color);

x++;

}

}

}

}

相关文章

  • OpenGL 区域种子填充

    用栈对递归算法进行优化,分为四个步骤: 1. 初始化。栈堆置空,将种子点(x,y)入栈。 2. 出栈,若栈空则结束...

  • 实验四、多边形填充算法

    实验四、多边形填充算法 一.区域填充算法 区域填充– 对区域重新着色的过程 –将指定的颜色从种子点扩展到整个区域...

  • [OpenGL] 不规则区域的填充算法

    不规则区域的填充算法 一、简单递归 利用Dfs实现简单递归填充。核心代码: 二、扫描线种子填充算法(四连通) 完整代码:

  • 漫水填充 python

    漫水填充思想: 就是将与种子点相连接的区域换成特定的颜色,通过设置连通方式或像素的范围可以控制填充的效果。通常是用...

  • 图像填充空洞区域以及查看dicom

    填充空洞区域 填充空洞区域的方法,除了洪水填充方法还有 cv2.fillPoly(one_label, [np.a...

  • CorelDRAW智能填充工具怎么填充颜色

    使用智能填充工具可以为任意的闭合区域填充颜色并设置轮廓。与其他填充工具不同,智能填充工具仅填充对象,它检测到区域的...

  • 脂肪填充需要做几次?为什么要多次填充呢?

    脂肪填充需要做几次?为什么要多次填充呢? 自体脂肪填充由于填充的区域的不同,在面积大的区域可能会二次填充,甚至多次...

  • OpenGL ES(三) 纹理

    纹理是一种应用到OpenGL绘图场景中三角形上的图像数据,它通过经过过滤纹理单元填充到实心区域。 下面是OpenG...

  • OpenGL球体纹理填充

    上篇文章我们介绍过 纹理的使用,以及常用函数。今天我们来使用纹理填充球体,以及镜面效果的绘制。 首先我们来看一下绘...

  • 七:OpenGL之纹理(上)

    前言: 之前的小节为大家介绍的都是基础颜色的填充,但是玩OpenGL怎么可以少了纹理填充呢,单调的颜色怎么可能满足...

网友评论

    本文标题:OpenGL 区域种子填充

    本文链接:https://www.haomeiwen.com/subject/jvqmpctx.html