一、四向种子填充算法.doc

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、四向种子填充算法

void BoundaryFill4(int x, int y, COLORREF fillClr, COLORREF edgeClr, CDC *pDC)

{

COLORREF cPixel;

cPixel=pDC->GetPixel(x, y);

if((cPixel !=edgeClr)&&(cPixel !=fillClr))

{

pDC->SetPixel(x,y,fillClr);

Sleep(0);

BoundaryFill4( x, y+1, fillClr,edgeClr,pDC);

BoundaryFill4( x, y-1, fillClr,edgeClr,pDC);

BoundaryFill4( x-1, y, fillClr,edgeClr,pDC);

BoundaryFill4( x+1, y, fillClr,edgeClr,pDC);

}

}

二、八向种子填充算法

void Scanline_seed_fill(CDC *pDC, int seedx, int seedy, COLORREF color, COLORREF fillcolor)

{

COLORREF clr;

int x,y,x0,y0,xl,xr,flag,xnextspan;

iStack=0;

x=seedx;

y=seedy;

y0=y;

push(x,y);

color=pDC->SetPixel(x,y,color);

while(iStack >0)

{

pop(x,y);

clr=pDC->SetPixel(x,y,fillcolor);

x0=x+1;

while(pDC->GetPixel(x0,y) !=color)

{

pDC->SetPixelV(x0,y,fillcolor);

x0++;

}

xr=x0-1; // 最右像素

x0=x-1;

while(pDC->GetPixel(x0,y) !=color)

{

pDC->SetPixelV(x0,y,fillcolor);

x0--;

}

xl=x0+1; // 最左像素

//

x0=xl;

y=y+1;

while(x0<=xr)

{

flag=0;

while(pDC->GetPixel(x0,y) !=color &&

pDC->GetPixel(x0,y) !=clr && x0

{

if(flag==0) flag=1;

x0++;

}

if(flag==1)

{

if(x0==xr && pDC->GetPixel(x0,y) !=color && pDC->GetPixel(x0,y) !=clr)

push(x0,y);

else

push(x0-1,y);

flag=0;

}

xnextspan=x0;

while(pDC->GetPixel(x0,y) ==color ||

pDC->GetPixel(x0,y) ==clr && x0<=xr)

x0++;

if(xnextspan==x0) x0++;

}

//

x0=xl;

y=y-2;

while(x0<=xr)

{

flag=0;

while(pDC->GetPixel(x0,y) !=color &&

pDC->GetPixel(x0,y) !=clr && x0

{

if(flag==0) flag=1;

x0++;

}

if(flag==1)

{

if(x0==xr && pDC->GetPixel(x0,y) !=color && pDC->GetPixel(x0,y) !=clr)

push(x0,y);

else

push(x0-1,y);

flag=0;

}

xnextspan=x0;

while(pDC->GetPixel(x0,y) ==color ||

pDC->GetPixel(x0,y) ==clr && x0<=xr)

x0++;

if(xnextspan==x0) x0++;

}

}

}

void push(int x, int y)

{

if(iStack>1000)

return;

else

{

iStack++;

stackX[iStack]=x;

stackY[iStack]=y;

}

}

int pop(int &x, int &y)

{

if(iStack<=0) return -1;

x=stackX[iStack];

y=stackY[iStack];

iStack--;

return iStack;

}

相关文档
最新文档