📄 wanggcz.cpp
字号:
// WANGGCZ.cpp: implementation of the WANGGCZ class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Designer.h"
#include "WANGGCZ.h"
#include "DIBAPI.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
WANGGCZ::WANGGCZ()
{
}
WANGGCZ::~WANGGCZ()
{
}
void WANGGCZ::QuZaDian(PICTURECOLOR m_picture_color[][LINENUM],int lianxushu)
{
//int *prect[200] = new int[LINENUM][LINENUM];
BOOL temp[LINENUM][LINENUM];
for(int i =0;i<LINENUM;i++)
for(int j =0;j<LINENUM;j++)
temp[i][j] = FALSE;
bool lab[LINENUM][LINENUM];
for(i =0;i<LINENUM;i++)
for(int j=0;j<LINENUM;j++)
lab[i][j] = false;
CPoint lab2[7];
int k=0;
for( i =0;i<LINENUM;i++)
for(int j=0;j<LINENUM;j++)
{ for(int k=0;k<m_LianXuShu;k++)
lab[lab2[k].y][lab2[k].x] = false;
this->m_LianXuShu =0;
temp[i][j] = this->QuZaDian_Judge(m_picture_color,lab,lab2,lianxushu,i,j,m_picture_color[i][j]);
//(!temp[i][j])
//xMessageBox("%d %d",i,j);
}
FILE *fp;
fp = fopen("e:\\test.txt","w+");
fprintf(fp,"%d",k);
fclose(fp);
for(i = 0;i<LINENUM;i++)
for(int j=0;j<LINENUM;j++)
{
if(temp[i][j] == FALSE)
{
if(i-1>=0 && temp[i-1][j] == TRUE)
m_picture_color[i][j] = m_picture_color[i-1][j];
else if(j-1>=0 && temp[i][j-1] == TRUE)
m_picture_color[i][j] = m_picture_color[i][j-1];
else if(i-1>=0 && j-1 >=0 && temp[i-1][j-1] == TRUE)
m_picture_color[i][j] = m_picture_color[i-1][j-1];
else if(i+1<LINENUM && temp[i+1][j] == TRUE)
m_picture_color[i][j] = m_picture_color[i+1][j];
else if(j-1>=0 && i+1<LINENUM && temp[i+1][j-1] == TRUE)
m_picture_color[i][j] = m_picture_color[i+1][j-1];
else if(j+1<LINENUM && i+1<LINENUM && temp[i+1][j+1] == TRUE)
m_picture_color[i][j] = m_picture_color[i+1][j+1];
else if(j+1<LINENUM && i-1>=0 && temp[i-1][j+1] == TRUE)
m_picture_color[i][j] = m_picture_color[i-1][j+1];
}
}
}
BOOL WANGGCZ::QuZaDian_Judge(PICTURECOLOR m_picture_color[][LINENUM], bool lab[][LINENUM],CPoint lab2[], int lianxushu,int y,int x,PICTURECOLOR spc)
{
if(this->m_LianXuShu>=lianxushu)
return TRUE;
this->m_LianXuShu++;
lab[y][x] = true;
lab2[this->m_LianXuShu-1].x = x;
lab2[this->m_LianXuShu-1].y = y;
if(m_LianXuShu>=lianxushu)
return TRUE;
else
{
if(y-1 >=0 && m_picture_color[y-1][x] == spc && lab[y-1][x] == false)
QuZaDian_Judge(m_picture_color,lab,lab2,lianxushu,y-1,x,spc);
if(m_LianXuShu>=lianxushu)
return TRUE;
if(y-1 >=0 && x-1>=0 && m_picture_color[y-1][x-1]==spc && lab[y-1][x-1] == false)
QuZaDian_Judge(m_picture_color,lab,lab2,lianxushu,y-1,x-1,spc);
if(m_LianXuShu>=lianxushu)
return TRUE;
if(x-1 >=0 && m_picture_color[y][x-1] == spc && lab[y][x-1] == false)
QuZaDian_Judge(m_picture_color,lab,lab2,lianxushu,y,x-1,spc);
if(m_LianXuShu>=lianxushu)
return TRUE;
if(y+1 < LINENUM && x-1>=0 && m_picture_color[y+1][x-1] == spc && lab[y+1][x-1] == false)
QuZaDian_Judge(m_picture_color,lab,lab2,lianxushu,y+1,x-1,spc);
if(m_LianXuShu>=lianxushu)
return TRUE;
if(y+1 <LINENUM && m_picture_color[y+1][x] == spc && lab[y+1][x] == false)
QuZaDian_Judge(m_picture_color,lab,lab2,lianxushu,y+1,x,spc);
if(m_LianXuShu>=lianxushu)
return TRUE;
if(y+1 <LINENUM && x+1<LINENUM && m_picture_color[y+1][x+1] == spc && lab[y+1][x+1] == false)
QuZaDian_Judge(m_picture_color,lab,lab2,lianxushu,y+1,x+1,spc);
if(m_LianXuShu>=lianxushu)
return TRUE;
if(x+1 <LINENUM && m_picture_color[y][x+1] == spc && lab[y][x+1] == false)
QuZaDian_Judge(m_picture_color,lab,lab2,lianxushu,y,x+1,spc);
if(m_LianXuShu>=lianxushu)
return TRUE;
if(y-1 >=0 && x+1<LINENUM && m_picture_color[y-1][x+1] == spc && lab[y-1][x+1] == false)
QuZaDian_Judge(m_picture_color,lab,lab2,lianxushu,y-1,x+1,spc);
if(m_LianXuShu>=lianxushu)
return TRUE;
}
return FALSE;
}
void WANGGCZ::Quci(PICTURECOLOR m_picture_color[][LINENUM], int lianxushu,int width,int height)
{
BOOL temp[LINENUM][LINENUM];
for(int i =0;i<LINENUM;i++)
for(int j =0;j<LINENUM;j++)
temp[i][j] = FALSE;
for(i =0;i<height;i++)
for(int j=0;j<width;j++)
temp[i][j] = this->QiCi_Judge(m_picture_color,lianxushu,i,j,m_picture_color[i][j],width,height);
{
for(i =0;i<LINENUM;i++)
for(int j=0;j<LINENUM;j++)
if(temp[i][j] == TRUE)
{
if(i-1>=0 && temp[i-1][j] != TRUE && m_picture_color[i-1][j] != m_picture_color[i][j])
{
m_picture_color[i][j] = m_picture_color[i-1][j];
continue;
}
if(i+1<height && temp[i+1][j] != TRUE&& m_picture_color[i+1][j] != m_picture_color[i][j])
{
m_picture_color[i][j] = m_picture_color[i+1][j];
continue;
}
if(j-1>=0 && temp[i][j-1] != TRUE && m_picture_color[i][j-1] != m_picture_color[i][j])
{
m_picture_color[i][j] = m_picture_color[i][j-1];
continue;
}
if(i-1>=0 && temp[i][j+1] != TRUE && m_picture_color[i][j+1] != m_picture_color[i][j])
{
m_picture_color[i][j] = m_picture_color[i][j+1];
continue;
}
}
}
}
BOOL WANGGCZ::QiCi_Judge(PICTURECOLOR m_picture_color[][LINENUM], int lianxushu, int y, int x, PICTURECOLOR spc,int width,int height)
{
if(x==0 && y ==0)
{
if(m_picture_color[y][x+1] != spc || m_picture_color[y+1][x] != spc)
return TRUE;
else
return FALSE;
}
if(x==0 && y ==height-1)
{
if(m_picture_color[y-1][x] != spc || m_picture_color[y][x+1]!= spc)
return TRUE;
else
return FALSE;
}
if(x == width-1 && y ==0)
{
if(m_picture_color[y][x-1] != spc || m_picture_color[y+1][x]!= spc)
return TRUE;
else
return FALSE;
}
if(x == width-1 && y ==height-1)
{
if(m_picture_color[y][x-1] != spc || m_picture_color[y-1][x]!= spc)
return TRUE;
else
return FALSE;
}
if(x==0 && y !=0 && y!=height-1)
{
if(m_picture_color[y][x+1] !=spc )
{
if(m_picture_color[y-1][x] != spc || m_picture_color[y+1][x] !=spc)
return TRUE;
else
return FALSE;
}
else
{
if(m_picture_color[y-1][x] != spc && m_picture_color[y+1][x] !=spc)
return TRUE;
else
return FALSE;
}
}
if(x== width-1 && y !=0 && y!=height-1)
{
if(m_picture_color[y][x-1] !=spc)
{
if(m_picture_color[y-1][x] != spc || m_picture_color[y+1][x] !=spc)
return TRUE;
else
return FALSE;
}
else
{
if(m_picture_color[y-1][x] != spc && m_picture_color[y+1][x] !=spc)
return TRUE;
else
return FALSE;
}
}
if(y ==0 && x!=0 && x!=width-1)
{
if(m_picture_color[y+1][x] !=spc)
{
if(m_picture_color[y][x-1] != spc || m_picture_color[y][x+1] !=spc)
return TRUE;
else
return FALSE;
}
else
{
if(m_picture_color[y][x-1] !=spc && m_picture_color[y][x+1] !=spc)
return TRUE;
else
return FALSE;
}
}
if(y ==height-1 && x!=0 && x!=width-1)
{
if(m_picture_color[y-1][x] !=spc)
{
if(m_picture_color[y][x-1] != spc || m_picture_color[y][x+1] !=spc)
return TRUE;
else
return FALSE;
}
else
{
if(m_picture_color[y][x-1] !=spc && m_picture_color[y][x+1] !=spc)
return TRUE;
else
return FALSE;
}
}
if(x!=0 && x!= width-1 && y !=0 && y!=height-1)
{
int count =0;
if(m_picture_color[y][x-1] !=spc)
count++;
if(m_picture_color[y][x+1] !=spc)
count++;
if(m_picture_color[y-1][x] !=spc)
count++;
if(m_picture_color[y+1][x] !=spc)
count++;
if(count>=3)
return TRUE;
else
return FALSE;
}
return FALSE;
}
BOOL WANGGCZ::XiuBu_Judge(PICTURECOLOR m_picture_color[][LINENUM], int y, int x,PICTURECOLOR *Destcolor)
{
int count = 0;
PICTURECOLOR spc;
if(x==0 && y ==0)
{ spc = m_picture_color[y][x+1];
if(m_picture_color[y][x] == spc)
return FALSE;
if(m_picture_color[y][x+1] == spc)
count++;
if(m_picture_color[y+1][x] == spc)
count++;
if(m_picture_color[y+1][x+1] == spc )
count++;
if(count==3)
{
*Destcolor = spc;
return TRUE;
}
else
return FALSE;
}
else if(x ==0 && y == LINENUM-1)
{ spc = m_picture_color[y][x+1];
if(m_picture_color[y][x] == spc)
return FALSE;
if(m_picture_color[y-1][x] == spc)
count++;
if(m_picture_color[y][x+1] == spc)
count++;
if(m_picture_color[y-1][x+1] == spc)
count++;
if(count==3)
{
*Destcolor = spc;
return TRUE;
}
else
return FALSE;
}
else if(x == LINENUM-1 && y ==0)
{ spc = m_picture_color[y][x-1];
if(m_picture_color[y][x]==spc)
return FALSE;
if(m_picture_color[y][x-1] == spc)
count++;
if(m_picture_color[y+1][x-1] == spc)
count++;
if(m_picture_color[y+1][x] == spc)
count++;
if(count==3)
{
*Destcolor = spc;
return TRUE;
}
else
return FALSE;
}
else if(x == LINENUM-1 && y == LINENUM-1)
{
spc = m_picture_color[y][x-1];
if(m_picture_color[y][x] == spc)
return FALSE;
if(m_picture_color[y][x-1] == spc)
count++;
if(m_picture_color[y-1][x-1] == spc)
count++;
if(m_picture_color[y-1][x] == spc)
count++;
if(count==3)
{
*Destcolor = spc;
return TRUE;
}
else
return FALSE;
}
else if(x == 0 && y!=0 && y!=LINENUM-1)
{
spc = m_picture_color[y][x+1];
if(m_picture_color[y][x] == spc)
return FALSE;
if(m_picture_color[y-1][x]==spc)
count++;
if(m_picture_color[y-1][x+1]==spc)
count++;
if(m_picture_color[y][x+1]==spc)
count++;
if(m_picture_color[y+1][x+1]==spc)
count++;
if(m_picture_color[y+1][x]==spc)
count++;
if(count==5)
{
*Destcolor = spc;
return TRUE;
}
else
return FALSE;
}
else if(x== LINENUM-1 && y!=0 && y!=LINENUM-1)
{
spc = m_picture_color[y][x-1];
if(m_picture_color[y][x] == spc)
return FALSE;
if(m_picture_color[y-1][x]==spc)
count++;
if(m_picture_color[y-1][x-1]==spc)
count++;
if(m_picture_color[y][x-1]==spc)
count++;
if(m_picture_color[y+1][x-1]==spc)
count++;
if(m_picture_color[y+1][x]==spc)
count++;
if(count==5)
{
*Destcolor = spc;
return TRUE;
}
else
return FALSE;
}
else if(y == 0 && x!=0 && x!= LINENUM-1)
{
spc = m_picture_color[y+1][x];
if(m_picture_color[y][x] == spc)
return FALSE;
if(m_picture_color[y][x-1] == spc)
count++;
if(m_picture_color[y+1][x-1] == spc)
count++;
if(m_picture_color[y+1][x] == spc)
count++;
if(m_picture_color[y+1][x+1] == spc)
count++;
if(m_picture_color[y][x+1] == spc)
count++;
if(count==5)
{
*Destcolor = spc;
return TRUE;
}
else
return FALSE;
}
else if(y == LINENUM-1 && x!=0 && x!= LINENUM-1)
{
spc = m_picture_color[y-1][x];
if(m_picture_color[y][x] == spc)
return FALSE;
if(m_picture_color[y][x-1] == spc)
count++;
if(m_picture_color[y-1][x-1] == spc)
count++;
if(m_picture_color[y-1][x] == spc)
count++;
if(m_picture_color[y-1][x+1] == spc)
count++;
if(m_picture_color[y][x+1] == spc)
count++;
if(count==5)
{
*Destcolor = spc;
return TRUE;
}
else
return FALSE;
}
else
{
spc = m_picture_color[y][x+1];
if(m_picture_color[y][x] != spc)
{
if(m_picture_color[y-1][x]==spc)
count++;
if(m_picture_color[y-1][x+1]==spc)
count++;
if(m_picture_color[y][x+1]==spc)
count++;
if(m_picture_color[y+1][x+1]==spc)
count++;
if(m_picture_color[y+1][x]==spc)
count++;
if(count==5)
{
*Destcolor = spc;
return TRUE;
}
}
count=0;
spc = m_picture_color[y][x-1];
if(m_picture_color[y][x] != spc)
{
if(m_picture_color[y-1][x]==spc)
count++;
if(m_picture_color[y-1][x-1]==spc)
count++;
if(m_picture_color[y][x-1]==spc)
count++;
if(m_picture_color[y+1][x-1]==spc)
count++;
if(m_picture_color[y+1][x]==spc)
count++;
if(count==5)
{
*Destcolor = spc;
return TRUE;
}
}
count=0;
spc = m_picture_color[y+1][x];
if(m_picture_color[y][x] != spc)
{
if(m_picture_color[y][x-1] == spc)
count++;
if(m_picture_color[y+1][x-1] == spc)
count++;
if(m_picture_color[y+1][x] == spc)
count++;
if(m_picture_color[y+1][x+1] == spc)
count++;
if(m_picture_color[y][x+1] == spc)
count++;
if(count==5)
{
*Destcolor = spc;
return TRUE;
}
}
count=0;
spc = m_picture_color[y-1][x];
if(m_picture_color[y][x] != spc)
{
if(m_picture_color[y][x-1] == spc)
count++;
if(m_picture_color[y-1][x-1] == spc)
count++;
if(m_picture_color[y-1][x] == spc)
count++;
if(m_picture_color[y-1][x+1] == spc)
count++;
if(m_picture_color[y][x+1] == spc)
count++;
if(count==5)
{
*Destcolor = spc;
return TRUE;
}
}
return FALSE;
}
}
void WANGGCZ::XiuBu(PICTURECOLOR m_picture_color[][LINENUM])
{
BOOL judge;
PICTURECOLOR pc;
for(int i =0;i<LINENUM;i++)
for(int j=0;j<LINENUM;j++)
{
judge = this->XiuBu_Judge(m_picture_color,i,j,&pc);
if(judge)
m_picture_color[i][j] = pc;
}
}
void WANGGCZ::PicAssemble(PICTURECOLOR m_picture_color[][LINENUM],CPoint mousepos,CPoint scroll,bool type,float m_jwm,int width,int height)
{
if(type == false)//水平方向
{
CPoint pos = gLocatePoint(mousepos,m_jwm,scroll);
if(pos.x !=-1 && pos.x <width)
{
PICTURECOLOR tempcolor[LINENUM][LINENUM];
for(int i =0;i<height ;i++)
for(int j=0;j<width;j++)
tempcolor[i][j] = m_picture_color[i][j];
for(int j=0;j<height;j++)
for(i=0;i<width-pos.x;i++)
m_picture_color[j][i] =tempcolor[j][pos.x+i];
for(i =0;i<height;i++)
for(j=width-pos.x;j<width;j++)
m_picture_color[i][j] = tempcolor[i][j-width+pos.x];
}
}
else //竖直方向
{
CPoint pos = gLocatePoint(mousepos,m_jwm,scroll);
if(pos.y !=-1 && pos.y <height)
{
PICTURECOLOR tempcolor[LINENUM][LINENUM];
for(int i =0;i<height ;i++)
for(int j=0;j<width;j++)
tempcolor[i][j] = m_picture_color[i][j];
for(int j=0;j<height-pos.y;j++)
for(i=0;i<width;i++)
m_picture_color[j][i] =tempcolor[j+pos.y][i];
for(i =height-pos.y;i<height;i++)
for(j=0;j<width;j++)
m_picture_color[i][j] = tempcolor[i-height+pos.y][j];
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -