边界标志填充算法(计算机图形学)

#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;
}

 

                
  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值