边标志扫描算法,种子填充算法,计算机图形学

来源:互联网 发布:中国税务网络大学教育 编辑:程序博客网 时间:2024/05/06 16:49

本程序仅供参考,可供大家学习参考

首先得导入C++的graphics图形库

#include <graphics.h>
#include <iostream>
using namespace std;

//边标志算法

void edgeMarkFill(int n,int *points)
{
 int flag=0,c1=0,c2=0;
 int maxX=0,minX=0,maxY=0,minY=0;
 int i=0,j=0,x,y;
 
 //求maxX和minX
 for(i=0,maxX=minX=points[0];i<n*2;i+=2)
 {
  if(maxX<points[i])
   maxX=points[i];
  else
   minX=points[i];
 }
 //求maxY和minY
 for(i=1,maxY=minY=points[1];i<n*2;i+=2)
 {
  if(maxY<points[i])
   maxY=points[i];
  else
   minY=points[i];
 }

 //下面进行边标志填充
 for(i=minY+1;i<maxY;i++)
 {
  for(j=minX;j<=maxX;j++)
  {
   c1=c2;
   c2=getpixel(j,i);
   if(c1==WHITE&&c2==BLACK)
    flag=!flag;
   if(flag)
    putpixel(j,i,WHITE);
  }

  //为现实效果而延迟时间的空循环
  for(int cc=0;cc<10000000;cc++);

 }

}

//种子填充算法四联通算法
int BoundaryFill4(int x, int y)
{
 int c=0;
 c=getpixel(x,y);
 if(c!=WHITE)
 {
  putpixel(x,y,WHITE);
 }
 if(c==WHITE)
  return 0;

 //为现实效果而延迟时间的空循环
 for(int i=0;i<100000;i++);

 BoundaryFill4(x+1,y);
 BoundaryFill4(x-1,y);
 BoundaryFill4(x,y+1);
 BoundaryFill4(x,y-1);
}


int main()
{
 int gdriver=DETECT, gmode;
 int points1[]={50,50,200,100,200,250,100,250,50,80,50,50};

 initgraph(&gdriver,&gmode,"");
 drawpoly(6,points1);          //画多边形
 edgeMarkFill(6,points1);

 //int points2[]={350,50,500,100,500,250,400,250,350,80,350,50};
 int points2[]={325,25,400,50,400,125,350,125,325,40,325,25};
 drawpoly(6,points2);
 //BoundaryFill4(400,110);
 BoundaryFill4(350,55);

 getchar();
 closegraph();
 
 return 0;
}

0 0
原创粉丝点击