📄 infohidedoc.cpp
字号:
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 + -