不透明的图案填充算法,大家帮忙看看
void CcgdemoView::TuanFill(CDC* pDC,int x,int y,int newcolor,int backgroundcolor)
{
int xx,yy;
int maskcode[8][8]={ 0,0,0,0,1,0,0,0, //砖缝图案
0,0,0,0,1,0,0,0,
0,0,0,0,1,0,0,0,
1,1,1,1,1,1,1,1,
1,0,0,0,0,0,0,0,
1,0,0,0,0,0,0,0,
1,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1};
xx=x%8; //多边形区域内点坐标x映射到图案坐标xx
yy=y%8; //多边形区域内点坐标y到图案坐标yy
if(maskcode[yy][xx])
pDC->SetPixel(x,y,newcolor); // newcolor 为前景色
else
pDC->SetPixel(x,y,backgroundcolor); // backgroundcolor为背景色
}
当我点下右键的好似后开始填充,为什么只有一个点,难道是没有循环的原因吗。
[解决办法]
没有循环的原因
[解决办法]
void TuanFill(CDC* pDC,int x,int y,int newcolor,int backgroundcolor)
{
int xx,yy;
int maskcode[8][8]={
0,0,0,0,1,0,0,0, //砖缝图案
0,0,0,0,1,0,0,0,
0,0,0,0,1,0,0,0,
1,1,1,1,1,1,1,1,
1,0,0,0,0,0,0,0,
1,0,0,0,0,0,0,0,
1,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1};
xx=x/8; //不是 模 '%'
yy=y/8;
for(int jj=0;jj<xx;jj++)
{
for(int kk=0;kk<yy;kk++)
{
if(maskcode[jj][kk])
pDC->SetPixel(jj,kk,newcolor); // newcolor 为前景色
else
pDC->SetPixel(jj,kk,backgroundcolor); // backgroundcolor为背景色
}
}
}
void TuanFill(CDC* pDC,int x,int y,int newcolor,int backgroundcolor)
{
int xx,yy;
int maskcode[8][8]={
0,0,0,0,1,0,0,0, //砖缝图案
0,0,0,0,1,0,0,0,
0,0,0,0,1,0,0,0,
1,1,1,1,1,1,1,1,
1,0,0,0,0,0,0,0,
1,0,0,0,0,0,0,0,
1,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1};
//
for(xx=0;xx<x;xx++)
{
for(yy=0;yy<y;yy++)
{
if(maskcode[yy%8][xx%8])
pDC->SetPixel(xx,yy,newcolor); // newcolor 为前景色
else
pDC->SetPixel(xx,yy,backgroundcolor); // backgroundcolor为背景色
}
}
}