区域填充算法

llyzq 2006-05-09 09:45:03
我用MFC做的
void CMyView::FloodFill4(CDC* pDC, int x, int y, COLORREF oldColor, COLORREF newColor)
{
if(x <= 100 || y <= 100 || x >=300 || y >= 400)
return;

if(pDC && pDC->GetPixel(x,y)==oldColor)
{
pDC->SetPixel(x,y,newColor);
FloodFill4(pDC,x,y+1,oldColor,newColor);
FloodFill4(pDC,x,y-1,oldColor,newColor);
FloodFill4(pDC,x-1,y,oldColor,newColor);
FloodFill4(pDC,x+1,y,oldColor,newColor);
}
}

void CMyView::Draw(CDC* pDC)
{
CBrush brush,*oldbrush;
brush.CreateSolidBrush(RGB(128,128,128));
oldbrush = pDC->SelectObject(&brush);
pDC->Rectangle(100,100,300,400);
pDC->SelectObject(oldbrush);

CBrush brush1;
brush1.CreateSolidBrush(RGB(128,0,128));
oldbrush = pDC->SelectObject(&brush1);
pDC->Rectangle(150,150,180,320);
pDC->Rectangle(200,200,250,380);
pDC->SelectObject(oldbrush);
}

void CMyView::OnDraw(CDC* pDC)
{
CMyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
Draw(pDC);
FloodFill4(pDC,120,120,RGB(128,128,128),RGB(255,0,0));

}

可是不能实现...
...全文
434 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
devinside 2006-05-10
  • 打赏
  • 举报
回复
循环好了,干什么递归,再说你的递归也太。。。无敌浪费了
寻开心 2006-05-10
  • 打赏
  • 举报
回复
这里有现成的东西
http://www.codeproject.com/gdi/quickfill.asp
livedeal 2006-05-10
  • 打赏
  • 举报
回复
CFlwDataDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CMainFrame *pMain=(CMainFrame *)AfxGetApp()->m_pMainWnd;
COLORREF colortemp;
colortemp=m_pDC->GetPixel(point);
int nDx[]={1,0, 0,-1};
int nDy[]={0,1,-1, 0};
long *pnGrowQueX=new long[pDoc->Width*pDoc->Height];
long *pnGrowQueY=new long[pDoc->Width*pDoc->Height];
int nStart=0;
int nEnd=0;
int k=0;
int xx=0;
int yy=0;
int nCurrentX=0;
int nCurrentY=0;
pnGrowQueX[nStart]=point.x;
pnGrowQueY[nStart]=point.y;
if(colortemp!=tpcolor)
{
while(nStart<=nEnd)
{
nCurrentX=pnGrowQueX[nStart];
nCurrentY=pnGrowQueY[nStart];
for(k=0;k<4;k++)
{
xx=nCurrentX+nDx[k];
yy=nCurrentY+nDy[k];
if(xx>=0 && xx< pDoc->Width && yy>=0 && yy< pDoc->Height)
{
if(pDoc->m_pBuff[yy*pDoc->Width+xx]==colortemp)
{
nEnd++;
pnGrowQueX[nEnd]=xx;
pnGrowQueY[nEnd]=yy;
//标记已经生长的点
pDoc->m_pBuff[yy*pDoc->Width+xx]=tpcolor;
}
}
}
nStart++;
}
}
llyzq 2006-05-09
  • 打赏
  • 举报
回复
啊哦...

应该怎么解决列...

能不能给个方案...
xing_xing_xing 2006-05-09
  • 打赏
  • 举报
回复
栈溢出了

pDC->FloodFill(120,120,RGB(128,128,128));

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧