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

📄 infohidedoc.cpp

📁 基于混沌系统的图像加密算法
💻 CPP
📖 第 1 页 / 共 4 页
字号:
				pal[cnt++] = b|(g<<8)|(r<<16);
			}
		}
	}
	
	/* 返回调色板使用项个数 */
	return cnt;
	
}

unsigned long CInfoHideDoc::CnvTo256PalIndex(int x,/* 该象素在图象中的水平位置 */
											 int y,/* 该象素在图象中的垂直位置 */											 
											 unsigned char ucr, /* 象素的R份量 */											 
											 unsigned char ucg,/* 象素的G份量 */ 
											 unsigned char ucb/* 象素的B份量 */
											 )
{
	unsigned long	pix = 0;
	
	if (ucb > ISPAL_BEGIN)
	{
		ucb = (((ISPAL_PATTERN_SIZE*((unsigned int)ucb%ISPAL_STEP))/ISPAL_STEP) < 
			BayerPattern[y&7][x&7]) ? ((unsigned int)ucb/ISPAL_STEP)*ISPAL_STEP : 
		min(((unsigned int)ucb/ISPAL_STEP)*ISPAL_STEP+ISPAL_STEP, ISPAL_END);
	}
	else
	{
		ucb = ISPAL_BEGIN;
	}
	
	if (ucg > ISPAL_BEGIN)
	{
		ucg = (((ISPAL_PATTERN_SIZE*((unsigned int)ucg%ISPAL_STEP))/ISPAL_STEP) < 
			BayerPattern[y&7][x&7]) ? ((unsigned int)ucg/ISPAL_STEP)*ISPAL_STEP : 
		min(((unsigned int)ucg/ISPAL_STEP)*ISPAL_STEP+ISPAL_STEP, ISPAL_END);
	}
	else
	{
		ucg = ISPAL_BEGIN;
	}
	
	if (ucr > ISPAL_BEGIN)
	{
		ucr = (((ISPAL_PATTERN_SIZE*((unsigned int)ucr%ISPAL_STEP))/ISPAL_STEP) < 
			BayerPattern[y&7][x&7]) ? ((unsigned int)ucr/ISPAL_STEP)*ISPAL_STEP : 
		min(((unsigned int)ucr/ISPAL_STEP)*ISPAL_STEP+ISPAL_STEP, ISPAL_END);
	}
	else
	{
		ucr = ISPAL_BEGIN;
	}
	
	pix = ((unsigned long)ucr<<16)|((unsigned long)ucg<<8)|((unsigned long)ucb);
	
	/* 返回该象素在调色板中的索引值 */
	return (((pix&0xff)-ISPAL_BEGIN)/ISPAL_STEP)+
		(((((pix&0xff00)>>8)-ISPAL_BEGIN)/ISPAL_STEP)*6)+
		(((((pix&0xff0000)>>16)-ISPAL_BEGIN)/ISPAL_STEP)*36);
}

void CInfoHideDoc::OnVideoPar()//视频参数的调节 
{
	// TODO: Add your command handler code here
	VIDEO_PAR vp_pdlg;
	if(vp_pdlg.DoModal()==IDOK)
	{
		int i,j;
		int Y,Cb,Cr,u,v;

		if(vp_pdlg.m_slider_bri!=50)//亮度
		{
			for(i=0;i<m_size.cy;i++)
				for(j=0;j<m_size.cx;j++)
				{//改变亮度算法
					Y=(int)(0.114*lpbits[(i*m_size.cx+j)*3]+0.587*lpbits[(i*m_size.cx+j)*3+1]
						+0.299*lpbits[(i*m_size.cx+j)*3+2]);
					if(Y>234)Y=234;
					if(Y<17)Y=17;
					Cb=128+(int)(0.5*lpbits[(i*m_size.cx+j)*3]-0.3313*lpbits[(i*m_size.cx+j)*3+1]
						-0.1687*lpbits[(i*m_size.cx+j)*3+2]);
					if(Cb>190)Cb=190;
					if(Cb<66)Cb=66;
					Cr=128-(int)(0.0813*lpbits[(i*m_size.cx+j)*3]-0.4187*lpbits[(i*m_size.cx+j)*3+1]
						+0.5*lpbits[(i*m_size.cx+j)*3+2]);
					if(Cr>207)Cr=207;
					if(Cr<49)Cr=49;

					if(vp_pdlg.m_slider_bri>50)Y=Y+(234-Y)*(vp_pdlg.m_slider_bri-50)/50;
					else Y=Y+(Y-17)*(vp_pdlg.m_slider_bri-50)/50;
					
					if((Y+1.772*(Cb-128))>255)lpbits[(i*m_size.cx+j)*3]=255;
					else if((Y+1.772*(Cb-128))<0) lpbits[(i*m_size.cx+j)*3]=0;
					else lpbits[(i*m_size.cx+j)*3]=(BYTE)(Y+1.772*(Cb-128));
					if((Y-0.34414*(Cb-128)-0.71414*(Cr-128))>255)lpbits[(i*m_size.cx+j)*3+1]=255;
					else if((Y-0.34414*(Cb-128)-0.71414*(Cr-128))<0)lpbits[(i*m_size.cx+j)*3+1]=0;
					else lpbits[(i*m_size.cx+j)*3+1]=(BYTE)(Y-0.34414*(Cb-128)-0.71414*(Cr-128));
					if((Y+1.402*(Cr-128))>255)lpbits[(i*m_size.cx+j)*3+2]=255;
					else if((Y+1.402*(Cr-128))<0)lpbits[(i*m_size.cx+j)*3+2]=0;
					else lpbits[(i*m_size.cx+j)*3+2]=(BYTE)(Y+1.402*(Cr-128));
				}
		}
		if(vp_pdlg.m_slider_sat!=50)//饱和度
		{
			for(i=0;i<m_size.cy;i++)
				for(j=0;j<m_size.cx;j++)
				{//改变饱和度算法
					Y=(int)(0.114*lpbits[(i*m_size.cx+j)*3]+0.587*lpbits[(i*m_size.cx+j)*3+1]
						+0.299*lpbits[(i*m_size.cx+j)*3+2]);
					if(Y>255)Y=255;
					if(Y<0)Y=0;
					u=(int)(0.437*lpbits[(i*m_size.cx+j)*3]-0.289*lpbits[(i*m_size.cx+j)*3+1]
						-0.147*lpbits[(i*m_size.cx+j)*3+2]);
//					if(u>255)u=255;
//					if(u<0)u=0;
					v=(int)(-0.1*lpbits[(i*m_size.cx+j)*3]-0.515*lpbits[(i*m_size.cx+j)*3+1]
						+0.615*lpbits[(i*m_size.cx+j)*3+2]);
//					if(v>255)v=255;
//					if(v<0)v=0;
					
					if(vp_pdlg.m_slider_sat>50)//时间关系,增大饱和度未做
					{
						
					}
					else//减小饱和度
					{
						u=u+u*(vp_pdlg.m_slider_sat-50)/50;
						v=v+v*(vp_pdlg.m_slider_sat-50)/50;
					}
					
					if((Y+2.032*u)>255)lpbits[(i*m_size.cx+j)*3]=255;
					else if((Y+2.032*u)<0)lpbits[(i*m_size.cx+j)*3]=0;
					else lpbits[(i*m_size.cx+j)*3]=(BYTE)(Y+2.032*u);
					if((Y-0.395*u-0.581*v)>255)lpbits[(i*m_size.cx+j)*3+1]=255;
					else if((Y-0.395*u-0.581*v)<0)lpbits[(i*m_size.cx+j)*3+1]=0;
					else lpbits[(i*m_size.cx+j)*3+1]=(BYTE)(Y-0.395*u-0.581*v);
					if((Y+1.14*v)>255)lpbits[(i*m_size.cx+j)*3+2]=255;
					else if((Y+1.14*v)<0)lpbits[(i*m_size.cx+j)*3+2]=0;
					else lpbits[(i*m_size.cx+j)*3+2]=(BYTE)(Y+1.14*v);
				}
		}
		if(vp_pdlg.m_slider_con!=50)//对比度
		{
			for(i=0;i<m_size.cy;i++)
				for(j=0;j<m_size.cx;j++)
				{//改变对比度算法
					Y=(int)(0.114*lpbits[(i*m_size.cx+j)*3]+0.587*lpbits[(i*m_size.cx+j)*3+1]
						+0.299*lpbits[(i*m_size.cx+j)*3+2]);
					if(Y>234)Y=234;
					if(Y<17)Y=17;
					Cb=128+(int)(0.5*lpbits[(i*m_size.cx+j)*3]-0.3313*lpbits[(i*m_size.cx+j)*3+1]
						-0.1687*lpbits[(i*m_size.cx+j)*3+2]);
					if(Cb>190)Cb=190;
					if(Cb<66)Cb=66;
					Cr=128-(int)(0.0813*lpbits[(i*m_size.cx+j)*3]-0.4187*lpbits[(i*m_size.cx+j)*3+1]
						+0.5*lpbits[(i*m_size.cx+j)*3+2]);
					if(Cr>207)Cr=207;
					if(Cr<49)Cr=49;

					if(vp_pdlg.m_slider_con>50)//增大对比度
					{
						if(Y>125)//原始亮度大于平均值
						{
							Y=Y+(234-Y)*(vp_pdlg.m_slider_con-50)/50;
						}
						else//原始亮度小于平均值
						{
							Y=Y+(17-Y)*(vp_pdlg.m_slider_con-50)/50;
						}
					}
					else//减小对比度
					{
						Y=Y+(Y-125)*(vp_pdlg.m_slider_con-50)/50;
					}
					
					if((Y+1.772*(Cb-128))>255)lpbits[(i*m_size.cx+j)*3]=255;
					else if((Y+1.772*(Cb-128))<0)lpbits[(i*m_size.cx+j)*3]=0;
					else lpbits[(i*m_size.cx+j)*3]=(BYTE)(Y+1.772*(Cb-128));
					if((Y-0.34414*(Cb-128)-0.71414*(Cr-128))>255)lpbits[(i*m_size.cx+j)*3+1]=255;
					else if((Y-0.34414*(Cb-128)-0.71414*(Cr-128))<0)lpbits[(i*m_size.cx+j)*3+1]=0;
					else lpbits[(i*m_size.cx+j)*3+1]=(BYTE)(Y-0.34414*(Cb-128)-0.71414*(Cr-128));
					if((Y+1.402*(Cr-128))>255)lpbits[(i*m_size.cx+j)*3+2]=255;
					else if((Y+1.402*(Cr-128))<0)lpbits[(i*m_size.cx+j)*3+2]=0;
					else lpbits[(i*m_size.cx+j)*3+2]=(BYTE)(Y+1.402*(Cr-128));
				}
		}
		if(vp_pdlg.m_slider_hue!=0)//色调
		{//时间关系,色调未做!
			
		}
	}
	UpdateAllViews(NULL);
	SetModifiedFlag();
}
/***************************************************************
*ProcessName:Robert算子
***************************************************************/
void CInfoHideDoc::OnRobert() 
{
	// TODO: Add your command handler code here
	//Roberts算子:G[i,i]=|f[i,j]-f[i+1,j+1]|+|f[i+1,j]-f[i,j+1]|;
	int i,j,*pbuffer;
	pbuffer=new int[m_size.cx*m_size.cy*3];//设置中间BUFFER 
	for(i=0;i<m_size.cy;i++)
		for(j=0;j<m_size.cx;j++)
		{
			pbuffer[(i*m_size.cx+j)*3]=lpbits[(i*m_size.cx+j)*3];
			pbuffer[(i*m_size.cx+j)*3+1]=lpbits[(i*m_size.cx+j)*3+1];
			pbuffer[(i*m_size.cx+j)*3+2]=lpbits[(i*m_size.cx+j)*3+2];
		}
	for(i=0;i<(m_size.cy-1);i++)
		for(j=0;j<(m_size.cx-1);j++)
		{
			lpbits[(i*m_size.cx+j)*3]=abs(pbuffer[(i*m_size.cx+j)*3]-pbuffer[((i+1)*m_size.cx+j+1)*3])
				+abs(pbuffer[((i+1)*m_size.cx+j)*3]-pbuffer[(i*m_size.cx+j+1)*3]);
			lpbits[(i*m_size.cx+j)*3+1]=abs(pbuffer[(i*m_size.cx+j)*3+1]-pbuffer[((i+1)*m_size.cx+j+1)*3+1])
				+abs(pbuffer[((i+1)*m_size.cx+j)*3+1]-pbuffer[(i*m_size.cx+j+1)*3+1]);
			lpbits[(i*m_size.cx+j)*3+2]=abs(pbuffer[(i*m_size.cx+j)*3+2]-pbuffer[((i+1)*m_size.cx+j+1)*3+2])
				+abs(pbuffer[((i+1)*m_size.cx+j)*3+2]-pbuffer[(i*m_size.cx+j+1)*3+2]);
		}
	UpdateAllViews(NULL);
	SetModifiedFlag();
}
/***************************************************************
*ProcessName:Sobe算子
***************************************************************/
void CInfoHideDoc::OnSobe() 
{
	// TODO: Add your command handler code here
	//Sobe算子:G[i,i]=|f[i-1,j+1]+2f[i,j+1]+f[i+1,j+1]-f[i-1,j-1]-2f[i,j-1]-f[i+1,j-1]|
	//+|f[i-1,j-1]+2f[i-1,j]+f[i-1,j+1]-f[i+1,j-1]-2f[i+1,j]-f[i+1,j+1]|;
	int i,j,*pbuffer;
	pbuffer=new int[m_size.cx*m_size.cy*3];//设置中间BUFFER 
	for(i=0;i<m_size.cy;i++)
		for(j=0;j<m_size.cx;j++)
		{
			pbuffer[(i*m_size.cx+j)*3]=lpbits[(i*m_size.cx+j)*3];
			pbuffer[(i*m_size.cx+j)*3+1]=lpbits[(i*m_size.cx+j)*3+1];
			pbuffer[(i*m_size.cx+j)*3+2]=lpbits[(i*m_size.cx+j)*3+2];
		}
	for(i=1;i<(m_size.cy-1);i++)
		for(j=1;j<(m_size.cx-1);j++)
		{
			lpbits[(i*m_size.cx+j)*3]=abs(pbuffer[((i-1)*m_size.cx+j+1)*3]+2*pbuffer[(i*m_size.cx+j+1)*3]
				+pbuffer[((i+1)*m_size.cx+j+1)*3]-pbuffer[((i-1)*m_size.cx+j-1)*3]
				-2*pbuffer[(i*m_size.cx+j-1)*3]-pbuffer[((i+1)*m_size.cx+j-1)*3])
				+abs(pbuffer[((i-1)*m_size.cx+j-1)*3]+2*pbuffer[((i-1)*m_size.cx+j)*3]
				+pbuffer[((i-1)*m_size.cx+j+1)*3]-pbuffer[((i+1)*m_size.cx+j-1)*3]
				-2*pbuffer[((i+1)*m_size.cx+j)*3]-pbuffer[((i+1)*m_size.cx+j+1)*3]);
			lpbits[(i*m_size.cx+j)*3+1]=abs(pbuffer[((i-1)*m_size.cx+j+1)*3+1]+2*pbuffer[(i*m_size.cx+j+1)*3+1]
				+pbuffer[((i+1)*m_size.cx+j+1)*3+1]-pbuffer[((i-1)*m_size.cx+j-1)*3+1]
				-2*pbuffer[(i*m_size.cx+j-1)*3+1]-pbuffer[((i+1)*m_size.cx+j-1)*3+1])
				+abs(pbuffer[((i-1)*m_size.cx+j-1)*3+1]+2*pbuffer[((i-1)*m_size.cx+j)*3+1]
				+pbuffer[((i-1)*m_size.cx+j+1)*3+1]-pbuffer[((i+1)*m_size.cx+j-1)*3+1]
				-2*pbuffer[((i+1)*m_size.cx+j)*3+1]-pbuffer[((i+1)*m_size.cx+j+1)*3+1]);
			lpbits[(i*m_size.cx+j)*3+2]=abs(pbuffer[((i-1)*m_size.cx+j+1)*3+2]+2*pbuffer[(i*m_size.cx+j+1)*3+2]
				+pbuffer[((i+1)*m_size.cx+j+1)*3+2]-pbuffer[((i-1)*m_size.cx+j-1)*3+2]
				-2*pbuffer[(i*m_size.cx+j-1)*3+2]-pbuffer[((i+1)*m_size.cx+j-1)*3+2])
				+abs(pbuffer[((i-1)*m_size.cx+j-1)*3+2]+2*pbuffer[((i-1)*m_size.cx+j)*3+2]
				+pbuffer[((i-1)*m_size.cx+j+1)*3+2]-pbuffer[((i+1)*m_size.cx+j-1)*3+2]
				-2*pbuffer[((i+1)*m_size.cx+j)*3+2]-pbuffer[((i+1)*m_size.cx+j+1)*3+2]);
		}
	UpdateAllViews(NULL);
	SetModifiedFlag();
}
/***************************************************************
*ProcessName:Laplace算子
***************************************************************/
void CInfoHideDoc::OnLaplace() 
{
	// TODO: Add your command handler code here
	//拉普拉斯算子:G[I,j]=|f[i+1,j]+f[i-1,j]+f(i,j+1)+f[i,j-1]-4f[i,j]|;
	int i,j,*pbuffer;
	pbuffer=new int[m_size.cx*m_size.cy*3];//设置中间BUFFER 
	for(i=0;i<m_size.cy;i++)
		for(j=0;j<m_size.cx;j++)
		{
			pbuffer[(i*m_size.cx+j)*3]=lpbits[(i*m_size.cx+j)*3];
			pbuffer[(i*m_size.cx+j)*3+1]=lpbits[(i*m_size.cx+j)*3+1];
			pbuffer[(i*m_size.cx+j)*3+2]=lpbits[(i*m_size.cx+j)*3+2];
		}
	for(i=1;i<(m_size.cy-1);i++)
		for(j=1;j<(m_size.cx-1);j++)
		{
			lpbits[(i*m_size.cx+j)*3]=abs(pbuffer[((i+1)*m_size.cx+j)*3]+pbuffer[((i-1)*m_size.cx+j)*3]
				+pbuffer[(i*m_size.cx+j+1)*3]+pbuffer[(i*m_size.cx+j-1)*3]
				-4*pbuffer[(i*m_size.cx+j)*3]);
			lpbits[(i*m_size.cx+j)*3+1]=abs(pbuffer[((i+1)*m_size.cx+j)*3+1]+pbuffer[((i-1)*m_size.cx+j)*3+1]
				+pbuffer[(i*m_size.cx+j+1)*3+1]+pbuffer[(i*m_size.cx+j-1)*3+1]
				-4*pbuffer[(i*m_size.cx+j)*3+1]);
			lpbits[(i*m_size.cx+j)*3+2]=abs(pbuffer[((i+1)*m_size.cx+j)*3+2]+pbuffer[((i-1)*m_size.cx+j)*3+2]
				+pbuffer[(i*m_size.cx+j+1)*3+2]+pbuffer[(i*m_size.cx+j-1)*3+2]
				-4*pbuffer[(i*m_size.cx+j)*3+2]);
		}
	UpdateAllViews(NULL);
	SetModifiedFlag();
}
/***************************************************************
*ProcessName:lorenz加密
*
*Author:yuhuan
*
*Date: 2008-10-13
***************************************************************/
void CInfoHideDoc::OnLorenzEncode() 
{
	// TODO: Add your command handler code here
	CLorenz  dlg;
	dlg.m_nlorenzx=0.6;
	dlg.m_nlorenzy=0.4;
    dlg.m_nlorenzz=0.6;
	dlg.DoModal();
    
	double x,y,z;
	x=dlg.m_nlorenzx;
	y=dlg.m_nlorenzy;
	z=dlg.m_nlorenzz;
	LONG i,j;
	double * pbuffer;
	pbuffer=new double[m_size.cx*m_size.cy*3+10];//设置中间BUFFER 
	for(i=1;i<=m_size.cx*m_size.cy;i++)
	{  
		Lorenz_3D(&x,&y,&z);
		pbuffer[3*(i-1)+0]=(x*100000.0-(int)(x*100000.0))*1000.0;
		pbuffer[3*(i-1)+1]=(y*100000.0-(int)(y*100000.0))*1000.0;
		pbuffer[3*(i-1)+2]=(z*100000.0-(int)(z*100000.0))*1000.0;
	}
	for(i=0;i<m_size.cy;i++)
	{	for(j=0;j<m_size.cx;j++)
		{ 
		lpbits[(i*m_size.cy+j)*3]=((int)lpbits[(i*m_size.cy+j)*3]+
			(int)(pbuffer[(i*m_size.cy+j)*3]/999.0*256.0))%256;
		lpbits[(i*m_size.cy+j)*3+1]=((int)lpbits[(i*m_size.cy+j)*3+1]+
				(int)(pbuffer[(i*m_size.cy+j)*3+1]/999.0*256.0))%256;
		lpbits[(i*m_size.cy+j)*3+2]=((int)lpbits[(i*m_size.cy+j)*3+2]+
				(int)(pbuffer[(i*m_size.cy+j)*3+2]/999.0*256.0))%256;
	}
	}
	free(pbuffer);
	pbuffer=NULL;
	UpdateAllViews(NULL);
	SetModifiedFlag();
}
/***************************************************************
*ProcessName:lorenz解密
*
*Author:yuhuan
*
*Date: 2008-10-13
***************************************************************/
void CInfoHideDoc::OnLorenzDecode() 
{
	// TODO: Add your command handler code here
	CLorenz  dlg;
	dlg.m_nlorenzx=0.6;
	dlg.m_nlorenzy=0.4;
    dlg.m_nlorenzz=0.6;
	dlg.DoModal();
    
	double x,y,z;
	x=dlg.m_nlorenzx;
	y=dlg.m_nlorenzy;
	z=dlg.m_nlorenzz;
	LONG i,j;
	int * pbuffer;
	pbuffer=new int[m_size.cx*m_size.cy*3+10];//设置中间BUFFER 
	for(i=1;i<=m_size.cx*m_size.cy;i++)
	{  
		Lorenz_3D(&x,&y,&z);
		pbuffer[3*(i-1)+0]=(int)((x*100000.0-(int)(x*100000.0))*1000.0);
		pbuffer[3*(i-1)+1]=(int)((y*100000.0-(int)(y*100000.0))*1000.0);
		pbuffer[3*(i-1)+2]=(int)((z*100000.0-(int)(z*100000.0))*1000.0);
	}
	for(i=0;i<m_size.cy;i++)
	{	for(j=0;j<m_size.cx;j++)
	{ 
		lpbits[(i*m_size.cy+j)*3]=((int)lpbits[(i*m_size.cy+j)*3]+256-
			(int)(pbuffer[(i*m_size.cy+j)*3]/999.0*256.0))%256;
		lpbits[(i*m_size.cy+j)*3+1]=((int)lpbits[(i*m_size.cy+j)*3+1]+256-
			(int)(pbuffer[(i*m_size.cy+j)*3+1]/999.0*256.0))%256;
		lpbits[(i*m_size.cy+j)*3+2]=((int)lpbits[(i*m_size.cy+j)*3+2]+256-
			(int)(pbuffer[(i*m_size.cy+j)*3+2]/999.0*256.0))%256;
	}
	}
	free(pbuffer);
	pbuffer=NULL;
	UpdateAllViews(NULL);
	SetModifiedFlag();
}
/***************************************************************
*ProcessName:lorenz混沌序列生成函数
*
*Author:yuhuan
*
*Date: 2008-10-13
***************************************************************/
void CInfoHideDoc::Lorenz_3D(double *xi,double *yi,double *zi)
{
	double xo,yo,h,w;
	h=0.001;
	w=8/3;
	xo=(*xi)+h*10.0*((*yi)-(*xi));
	yo=(*yi)+h*(-(*xi)*(*zi)+28.0*(*xi)-(*yi));
	*zi = *zi+h*((*xi)*(*yi)-w*(*zi));
	*xi = xo;
	*yi = yo;
}
/***************************************************************
*ProcessName:三维Liu混沌系统加密方案
*
*Author:yuhuan
*
*Date: 2008-10-13
***************************************************************/
void CInfoHideDoc::OnLiuEncode() 
{
	// TODO: Add your command handler code here
	CLiu dlg;
	dlg.m_nLiux=3.0;
	dlg.m_nLiuy=3.0;
	dlg.m_nLiuz=30.0;
	dlg.DoModal();
	double x,y,z;
	x=dlg.m_nLiux;
	y=dlg.m_nLiuy;
	z=dlg.m_nLiuz;
	LONG i,j;
	int * pbuffer;
	pbuffer=new int[m_size.cx*m_size.cy*3+10];//设置中间BUFFER 
	for(i=1;i<=m_size.cx*m_size.cy;i++)
	{  
		Lorenz_3D(&x,&y,&z);
		pbuffer[3*(i-1)+0]=(int)((x*100000.0-(int)(x*100000.0))*1000.0);
		pbuffer[3*(i-1)+1]=(int)((y*100000.0-(int)(y*100000.0))*1000.0);
		pbuffer[3*(i-1)+2]=(int)((z*100000.0-(int)(z*100000.0))*1000.0);
	}
	for(i=0;i<m_size.cy;i++)
	{	for(j=0;j<m_size.cx;j++)
	{ 
		lpbits[(i*m_size.cy+j)*3]=((int)lpbits[(i*m_size.cy+j)*3]+
			(int)(pbuffer[(i*m_size.cy+j)*3]/999.0*256.0))%256;
		lpbits[(i*m_size.cy+j)*3+1]=((int)lpbits[(i*m_size.cy+j)*3+1]+
			(int)(pbuffer[(i*m_size.cy+j)*3+1]/999.0*256.0))%256;
		lpbits[(i*m_size.cy+j)*3+2]=((int)lpbits[(i*m_size.cy+j)*3+2]+
			(int)(pbuffer[(i*m_size.cy+j)*3+2]/999.0*256.0))%256;
	}
	}
	free(pbuffer);
	pbuffer=NULL;
	UpdateAllViews(NULL);
	SetModifiedFlag();
}
/***************************************************************
*ProcessName:三维Liu混沌系统解密方案
*
*Author:yuhuan
*
*Date: 2008-10-13
***************************************************************/
void CInfoHideDoc::OnLiuDecode() 
{
	// TODO: Add your command handler code here
	CLiu dlg;
	dlg.m_nLiux=3.0;
	dlg.m_nLiuy=3.0;
	dlg.m_nLiuz=30.0;
	dlg.DoModal();

	double x,y,z;
	x=dlg.m_nLiux;
	y=dlg.m_nLiuy;
	z=dlg.m_nLiuz;
	LONG i,j;
	int * pbuffer;
	pbuffer=new int[m_size.cx*m_size.cy*3+10];//设置中间BUFFER 
	for(i=1;i<=m_size.cx*m_size.cy;i++)
	{  
		Lorenz_3D(&x,&y,&z);
		pbuffer[3*(i-1)+0]=(int)((x*100000.0-(int)(x*100000.0))*1000.0);
		pbuffer[3*(i-1)+1]=(int)((y*100000.0-(int)(y*100000.0))*1000.0);
		pbuffer[3*(i-1)+2]=(int)((z*100000.0-(int)(z*100000.0))*1000.0);
	}
	for(i=0;i<m_size.cy;i++)
	{	for(j=0;j<m_size.cx;j++)
	{ 
		lpbits[(i*m_size.cy+j)*3]=((int)lpbits[(i*m_size.cy+j)*3]+256-
			(int)(pbuffer[(i*m_size.cy+j)*3]/999.0*256.0))%256;
		lpbits[(i*m_size.cy+j)*3+1]=((int)lpbits[(i*m_size.cy+j)*3+1]+256-
			(int)(pbuffer[(i*m_size.cy+j)*3+1]/999.0*256.0))%256;
		lpbits[(i*m_size.cy+j)*3+2]=((int)lpbits[(i*m_size.cy+j)*3+2]+256-
			(int)(pbuffer[(i*m_size.cy+j)*3+2]/999.0*256.0))%256;
	}
	}
	free(pbuffer);
	pbuffer=NULL;
	UpdateAllViews(NULL);
	SetModifiedFlag();
}
/***************************************************************
*ProcessName:三维Liu混沌系统混沌序列生成函数
*
*Author:yuhuan
*
*Date: 2008-10-13
***************************************************************/
void  WINAPI Liu_3D(double *xi,double *yi,double *zi)
{
	double xo,yo,h,c;
	h=0.001;
	c=2.5;
	xo=(*xi)+h*10.0*((*yi)-(*xi));
	yo=(*yi)+h*(-(*xi)*(*zi)+40.0*(*xi));
	*zi = *zi+h*4.0*((*xi)*(*xi)-c*(*zi));
	*xi = xo;
	*yi = yo;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -