区域填充的扫描线算法(2)

2019-06-17 14:36

i = x;

while(getpixel(i,y) == oldColor)/*向右填充*/ {

putpixel(i,y,newColor); i++; }

span.xRight = i - 1; /*确定区段右边界*/ i = x - 1;

while(getpixel(i,y) == oldColor)/*向左填充*/ {

putpixel(i,y,newColor); i--; }

span.xLeft = i + 1; /*确定区段左边界*/ /*初始化*/

SetStackEmpty(s); span.y = y;

PushStack(s,&span);/*将前面生成的区段压入堆栈*/ while( ! IsStackEmpty(s) )/*终止判断*/ {

/*出栈*/

PopStack(s, &span); /*处理上面扫描线*/ y = span.y + 1;

xRight = span.xRight; i = span.xLeft - 1;

isLeftEndSet = FALSE;

while(getpixel(i,y) == oldColor)/*向左填充*/ {

putpixel(i, y, newColor); i--; }

if( i != span.xLeft - 1)/*确定区段左边界*/ {

isLeftEndSet = TRUE; xLeft = i + 1; }

i = span.xLeft; while( i < xRight) {

spanNeedFill = FALSE;

while(getpixel(i,y) == oldColor) /*向右填充*/ {

if( ! spanNeedFill)

{

spanNeedFill = TRUE; if( ! isLeftEndSet) {

isLeftEndSet = TRUE; xLeft = i; } }

putpixel(i,y,newColor); i++; }

if( spanNeedFill ) {

span.y = y;

span.xLeft = xLeft; span.xRight = i - 1;

PushStack(s, &span); /*将区段压入堆栈*/ isLeftEndSet = FALSE; spanNeedFill = FALSE; }

/* while(getpixel(i,y) != oldColor) */ i++;

}/*end of while( i < xRight) */

/*处理下面一条扫描线,与处理上面一条扫描线完全类似*/ y = y - 2;

xRight = span.xRight; i = span.xLeft - 1;

isLeftEndSet = FALSE;

while(getpixel(i,y) == oldColor)/*向左填充*/ {

putpixel(i, y, newColor); i--; }

if( i != span.xLeft - 1)/*确定区段左边界*/ {

isLeftEndSet = TRUE; xLeft = i + 1; }

i = span.xLeft; while( i < xRight) {

spanNeedFill = FALSE;

while(getpixel(i,y) == oldColor) /*向右填充*/ {

if( ! spanNeedFill) {

spanNeedFill = TRUE; if( ! isLeftEndSet) {

isLeftEndSet = TRUE; xLeft = i; } }

putpixel(i,y,newColor); i++; }

if( spanNeedFill ) {

span.y = y;

span.xLeft = xLeft; span.xRight = i - 1;

PushStack(s, &span); /*将区段压入堆栈*/ isLeftEndSet = FALSE; spanNeedFill = FALSE; }

/* while(getpixel(i,y) != oldColor) */ i++;

}/*end of while( i < xRight) */ delay(2000); /*延时*/

}/*end of while( ! isStackEmpty() ) */

}/*end of ScanLineFill4() */

/*---------------------main()------------------------------------------*/ int main() {

initgr(); /* BGI初始化 */ setbkcolor(3); setcolor(1);

moveto(50, 50); /*绘制4连通区域*/ lineto(400, 50); lineto(400,300); lineto(150,300); lineto(150,400); lineto(50, 400); lineto(50, 50);

ScanLineFill4(150,150,0,14); /*相与后oldColor == 0*/ getch(); /* 暂停一下,看看前面绘图代码的运行结果 */ closegr(); /* 恢复TEXT屏幕模式 */ return 0;

}

七、实验结果


区域填充的扫描线算法(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:枫叶正红(1000字)作文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: