⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wanggcz.cpp

📁 《数字图象工程案例》原码
💻 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 + -