本程序仅供参考,可供大家学习参考
首先得导入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;
}