一、四向种子填充算法.doc
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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; }