个性化阅读
专注于IT技术分析

计算机图形:洪水填充算法

本文概述

在这种方法中, 选择区域内的一个点或种子。该点称为种子点。然后使用四个连接的方法或八个连接的方法填充指定的颜色。

洪水填充算法具有许多类似于边界填充的字符。但是这种方法更适合于填充多种颜色的边界。当边界具有多种颜色并且内部要用一种颜色填充时, 我们使用此算法。

洪水填充算法

在填充算法中, 我们从指定的内部点(x, y)开始, 然后将所有像素值当前均设置为具有所需颜色的给定内部颜色。然后使用4连接或8连接的方法, 逐步浏览像素位置, 直到所有内部点都被重新绘制。

坏处

  1. 很慢的算法
  2. 对于大型多边形可能会失败
  3. 初始像素需要更多有关周围像素的知识。

算法

Procedure floodfill (x, y, fill_ color, old_color: integer)
	If (getpixel (x, y)=old_color)
   {
	setpixel (x, y, fill_color);
	fill (x+1, y, fill_color, old_color);
	 fill (x-1, y, fill_color, old_color);
	fill (x, y+1, fill_color, old_color);
	fill (x, y-1, fill_color, old_color);
     }
}

程序1:要实现4连接的洪水填充算法:

#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<dos.h>
void flood(int, int, int, int);
void main()
{
	intgd=DETECT, gm;
	initgraph(&gd, &gm, "C:/TURBOC3/bgi");
	rectangle(50, 50, 250, 250);
	flood(55, 55, 10, 0);
	getch();
}
void flood(intx, inty, intfillColor, intdefaultColor)
{
	if(getpixel(x, y)==defaultColor)
	{
		delay(1);
		putpixel(x, y, fillColor);
		flood(x+1, y, fillColor, defaultColor);
		flood(x-1, y, fillColor, defaultColor);
		flood(x, y+1, fillColor, defaultColor);
		flood(x, y-1, fillColor, defaultColor);
	}
}

输出:

洪水填充算法

程序2:要实现8连接的洪水填充算法:

#include<stdio.h>
#include<graphics.h>
#include<dos.h>
#include<conio.h>
void floodfill(intx, inty, intold, intnewcol)
{
                int current;
                current=getpixel(x, y);
                if(current==old)
                {
                                delay(5);
                                putpixel(x, y, newcol);
                                floodfill(x+1, y, old, newcol);
                                floodfill(x-1, y, old, newcol);
                                floodfill(x, y+1, old, newcol);
                                floodfill(x, y-1, old, newcol);
                                floodfill(x+1, y+1, old, newcol);
                                floodfill(x-1, y+1, old, newcol);
                                floodfill(x+1, y-1, old, newcol);
                                floodfill(x-1, y-1, old, newcol);
                }
}
void main()
{
                intgd=DETECT, gm;
                initgraph(&gd, &gm, "C:\\TURBOC3\\BGI");
                rectangle(50, 50, 150, 150);
                floodfill(70, 70, 0, 15);
                getch();
                closegraph();
}

输出:

洪水填充算法

赞(1)
未经允许不得转载:srcmini » 计算机图形:洪水填充算法

评论 抢沙发

评论前必须登录!