计算机图形(洪水填充算法)

本文概述

  • 坏处
  • 算法
在这种方法中, 选择区域内的一个点或种子。该点称为种子点。然后使用四个连接的方法或八个连接的方法填充指定的颜色。
洪水填充算法具有许多类似于边界填充的字符。但是这种方法更适合于填充多种颜色的边界。当边界具有多种颜色并且内部要用一种颜色填充时, 我们使用此算法。
计算机图形(洪水填充算法)

文章图片
【计算机图形(洪水填充算法)】在填充算法中, 我们从指定的内部点(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(); }

输出:
计算机图形(洪水填充算法)

文章图片

    推荐阅读