#include <graphics.h>
#include <iostream>
using namespace std;
//边标志算法
void edgeMarkFill(int n,int *points)
{
int flag=0;//标志位,判断在图形区域内(1),还是在外面(0)
int c1=0,c2=0;//c1为边界色,c2为背景色
int maxX=0,minX=0,maxY=0,minY=0;
int i=0,j=0;
//求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);//getpixel()返回值为该像素点的RGB值
if(c1==WHITE&&c2==BLACK)
flag=!flag;
if(flag)
putpixel(j,i,WHITE);
}
//为现实效果而延迟时间的空循环
for(int cc=0;cc<10000000;cc++);
}
}
int main()
{
/*图形初始化函数:void far initgraph(int far *gdriver, int far *gmode, char *path);
其中gdriver和gmode分别表示图形驱动器和模式, path是指图形驱动程序所在的目录路径
gdriver=DETECT gmode=0:用于硬件测试*/
int gdriver=DETECT, gmode;
initgraph(&gdriver,&gmode,"");//根据测试结果初始化图形界面
int points1[]={50,50,200,100,200,250,100,250,50,80,50,50};//定义多边形点的坐标
drawpoly(6,points1); //画多边形
edgeMarkFill(6,points1);//边标志填充
// int points2[]={325,25,400,50,400,125,350,125,325,40,325,25};
// drawpoly(6,points2);
// BoundaryFill4(350,55);//种子填充算法
getchar();
closegraph();
return 0;
}
边界标志填充算法(计算机图形学)
最新推荐文章于 2024-02-18 13:08:19 发布