📄 coder.h
字号:
{
p0[(height>>l)+(i<<(s-l))+g][(j<<(s-l))+h].c=2;
}
}
c[k]=2;
}
k++;
}
}
}
//////////////////////////////////////////2
for(i=0;i<(height>>s);i++)
for(int j=0;j<(width>>s);j++)
{
if(p0[(height>>s)+i][(width>>s)+j].w>=T)
{
c[k]=1;
p0[(height>>s)+i][(width>>s)+j].c=1;
////////////////////////////////////
if(p0[(height>>s)+i][(width>>s)+j].w>=1.5*T)
{
cs[ks]=1;
}
else
{
cs[ks]=0;
}
ks++;
////////////////////////////////////
p0[(height>>s)+i][(width>>s)+j].w-=T;
//p0[(height>>s)+i][(width>>s)+j].w=0;
k++;
}
else if(p0[(height>>s)+i][(width>>s)+j].w<=-T)
{
c[k]=4;
p0[(height>>s)+i][(width>>s)+j].c=4;
////////////////////////////////////
if(p0[(height>>s)+i][(width>>s)+j].w>=1.5*T)
{
cs[ks]=1;
}
else
{
cs[ks]=0;
}
ks++;
////////////////////////////////////
p0[(height>>s)+i][(width>>s)+j].w=0;
k++;
}
else
{
if(p0[(height>>s)+i][(width>>s)+j].c!=2)
{
for(int l=s-1;l>=1;l--)
{
for(int g=0;g<(1<<(s-l));g++)
for(int h=0;h<(1<<(s-l));h++)
{
if(abs(p0[(height>>l)+(i<<(s-l))+g][(width>>l)+(j<<(s-l))+h].w)>=T)
{
c[k]=3;
}
}
}
if(c[k]!=3)
{
for(int l=s-1;l>=1;l--)
{
for(int g=0;g<(1<<(s-l));g++)
for(int h=0;h<(1<<(s-l));h++)
{
p0[(height>>l)+(i<<(s-l))+g][(width>>l)+(j<<(s-l))+h].c=2;
}
}
c[k]=2;
}
k++;
}
}
}
}
for( m=0;m<height;m++)
for(int n=0;n<width;n++)
{
p0[m][n].c=5;
}
T/=2;
}
///////////////////////
for(m=0;m<height;m++)
for(int n=0;n<width;n++)
{
pd[m][n]=p0[m][n].w;
}
////////////////////////
for(l=0;l<height;l++)
{
delete p0[l];
}
delete p0;
return k;
}
void decoderD(FW** pd,BYTE* c,BYTE* cs,int height,int width,int N1,int T,int TN)
{
int k=0;
int ks=0;
int s=1;
wn** p0=new wn* [height];
for(int l=0;l<height;l++)
{
p0[l]=new wn [width];
}
for(int m=0;m<height;m++)
for(int n=0;n<width;n++)
{
if(m<(height>>N1)&&n<(width>>N1))
{
p0[m][n].w=pd[m][n];
}
else
{
p0[m][n].w=0;
pd[m][n]=0;
}
p0[m][n].c=5;
}
for(int x=0;x<=TN;x++)
{
for(s=N1;s>=1;s--)
{
for(int i=0;i<(height>>s);i++)
for(int j=0;j<(width>>s);j++)
{
if(p0[i][(width>>s)+j].c!=2)
{
if(c[k]==1)
{
if(cs[ks]==1)p0[i][(width>>s)+j].w=1.5*T;
else p0[i][(width>>s)+j].w=T;
p0[i][(width>>s)+j].c=1;
ks++;
k++;
}
else if(c[k]==4)
{
if(cs[ks]==1)p0[i][(width>>s)+j].w=-1.5*T;
else p0[i][(width>>s)+j].w=-T;
p0[i][(width>>s)+j].c=4;
ks++;
k++;
}
else if(c[k]==2)
{
p0[i][(width>>s)+j].w=0;
p0[i][(width>>s)+j].c=2;
for(int l=s-1;l>=1;l--)
{
for(int g=0;g<(1<<(s-l));g++)
for(int h=0;h<(1<<(s-l));h++)
{
p0[(i<<(s-l))+g][(width>>l)+(j<<(s-l))+h].w=0;
p0[(i<<(s-l))+g][(width>>l)+(j<<(s-l))+h].c=2;
}
}
k++;
}
else
{
p0[i][(width>>s)+j].w=0;
p0[i][(width>>s)+j].c=3;
k++;
}
}
}
////////////////////////////////////1
for(i=0;i<(height>>s);i++)
for(int j=0;j<(width>>s);j++)
{
if(p0[(height>>s)+i][j].c!=2)
{
if(c[k]==1)
{
if(cs[ks]==1)p0[(height>>s)+i][j].w=1.5*T;
else p0[(height>>s)+i][j].w=T;
p0[(height>>s)+i][j].c=1;
ks++;
k++;
}
else if(c[k]==4)
{
if(cs[ks]==1)p0[(height>>s)+i][j].w=-1.5*T;
else p0[(height>>s)+i][j].w=-T;
p0[(height>>s)+i][j].c=4;
ks++;
k++;
}
else if(c[k]==2)
{
p0[(height>>s)+i][j].w=0;
p0[(height>>s)+i][j].c=2;
for(int l=s-1;l>=1;l--)
{
for(int g=0;g<(1<<(s-l));g++)
for(int h=0;h<(1<<(s-l));h++)
{
p0[(height>>l)+(i<<(s-l))+g][(j<<(s-l))+h].w=0;
p0[(height>>l)+(i<<(s-l))+g][(j<<(s-l))+h].c=2;
}
}
k++;
}
else
{
p0[(height>>s)+i][j].w=0;
p0[(height>>s)+i][j].c=3;
k++;
}
}
}
///////////////////////////////////////////////////////
for(i=0;i<(height>>s);i++)
for(int j=0;j<(width>>s);j++)
{
if(p0[(height>>s)+i][(width>>s)+j].c!=2)
{
if(c[k]==1)
{
if(cs[ks]==1)p0[(height>>s)+i][(width>>s)+j].w=1.5*T;
else p0[(height>>s)+i][(width>>s)+j].w=T;
p0[(height>>s)+i][(width>>s)+j].c=1;
ks++;
k++;
}
else if(c[k]==4)
{
if(cs[ks]==1)p0[(height>>s)+i][(width>>s)+j].w=-1.5*T;
else p0[(height>>s)+i][(width>>s)+j].w=-T;
p0[(height>>s)+i][(width>>s)+j].c=4;
ks++;
k++;
}
else if(c[k]==2)
{
p0[(height>>s)+i][(width>>s)+j].w=0;
p0[(height>>s)+i][(width>>s)+j].c=2;
for(int l=s-1;l>=1;l--)
{
for(int g=0;g<(1<<(s-l));g++)
for(int h=0;h<(1<<(s-l));h++)
{
p0[(height>>l)+(i<<(s-l))+g][(width>>l)+(j<<(s-l))+h].w=0;
p0[(height>>l)+(i<<(s-l))+g][(width>>l)+(j<<(s-l))+h].c=2;
}
}
k++;
}
else
{
p0[(height>>s)+i][(width>>s)+j].w=0;
p0[(height>>s)+i][(width>>s)+j].c=3;
k++;
}
}
}
}
for(m=0;m<height;m++)
for(int n=0;n<width;n++)
{
if(!(m<(height>>N1)&&n<(width>>N1)))
{
pd[m][n]+=p0[m][n].w;
}
}
for(int m=0;m<height;m++)
for(int n=0;n<width;n++)
{
if(m<(height>>N1)&&n<(width>>N1))
{
p0[m][n].w=pd[m][n];
}
else
{
p0[m][n].w=0;
}
p0[m][n].c=5;
}
T/=2;
}
for(l=0;l<height;l++)
{
delete p0[l];
}
delete p0;
}
void decoderLEN(FW** pd,BYTE* c,int height,int width,int N1,int T,int TN,int clen)
{
int k=0;
int s=1;
wn** p0=new wn* [height];
for(int l=0;l<height;l++)
{
p0[l]=new wn [width];
}
for(int m=0;m<height;m++)
for(int n=0;n<width;n++)
{
if(m<(height>>N1)&&n<(width>>N1))
{
p0[m][n].w=pd[m][n];
}
else
{
p0[m][n].w=0;
pd[m][n]=0;
}
p0[m][n].c=5;
}
for(int x=0;x<=TN;x++)
{
for(s=N1;s>=1;s--)
{
for(int i=0;i<(height>>s);i++)
{
for(int j=0;j<(width>>s);j++)
{
if(k<clen)
{
if(p0[i][(width>>s)+j].c!=2)
{
if(c[k]==1)
{
p0[i][(width>>s)+j].w=T;
p0[i][(width>>s)+j].c=1;
k++;
}
else if(c[k]==4)
{
p0[i][(width>>s)+j].w=-T;
p0[i][(width>>s)+j].c=4;
k++;
}
else if(c[k]==2)
{
p0[i][(width>>s)+j].w=0;
p0[i][(width>>s)+j].c=2;
for(int l=s-1;l>=1;l--)
{
for(int g=0;g<(1<<(s-l));g++)
for(int h=0;h<(1<<(s-l));h++)
{
p0[(i<<(s-l))+g][(width>>l)+(j<<(s-l))+h].w=0;
p0[(i<<(s-l))+g][(width>>l)+(j<<(s-l))+h].c=2;
}
}
k++;
}
else
{
p0[i][(width>>s)+j].w=0;
p0[i][(width>>s)+j].c=3;
k++;
}
}
}
else break;
}
if(k==clen)break;
}
////////////////////////////////////1
for(i=0;i<(height>>s);i++)
{
for(int j=0;j<(width>>s);j++)
{
if(k<clen)
{
if(p0[(height>>s)+i][j].c!=2)
{
if(c[k]==1)
{
p0[(height>>s)+i][j].w=T;
p0[(height>>s)+i][j].c=1;
k++;
}
else if(c[k]==4)
{
p0[(height>>s)+i][j].w=-T;
p0[(height>>s)+i][j].c=4;
k++;
}
else if(c[k]==2)
{
p0[(height>>s)+i][j].w=0;
p0[(height>>s)+i][j].c=2;
for(int l=s-1;l>=1;l--)
{
for(int g=0;g<(1<<(s-l));g++)
for(int h=0;h<(1<<(s-l));h++)
{
p0[(height>>l)+(i<<(s-l))+g][(j<<(s-l))+h].w=0;
p0[(height>>l)+(i<<(s-l))+g][(j<<(s-l))+h].c=2;
}
}
k++;
}
else
{
p0[(height>>s)+i][j].w=0;
p0[(height>>s)+i][j].c=3;
k++;
}
}
}
else break;
}
if(k==clen)break;
}
///////////////////////////////////////////////////////
for(i=0;i<(height>>s);i++)
{
for(int j=0;j<(width>>s);j++)
{
if(k<clen)
{
if(p0[(height>>s)+i][(width>>s)+j].c!=2)
{
if(c[k]==1)
{
p0[(height>>s)+i][(width>>s)+j].w=T;
p0[(height>>s)+i][(width>>s)+j].c=1;
k++;
}
else if(c[k]==4)
{
p0[(height>>s)+i][(width>>s)+j].w=-T;
p0[(height>>s)+i][(width>>s)+j].c=4;
k++;
}
else if(c[k]==2)
{
p0[(height>>s)+i][(width>>s)+j].w=0;
p0[(height>>s)+i][(width>>s)+j].c=2;
for(int l=s-1;l>=1;l--)
{
for(int g=0;g<(1<<(s-l));g++)
for(int h=0;h<(1<<(s-l));h++)
{
p0[(height>>l)+(i<<(s-l))+g][(width>>l)+(j<<(s-l))+h].w=0;
p0[(height>>l)+(i<<(s-l))+g][(width>>l)+(j<<(s-l))+h].c=2;
}
}
k++;
}
else
{
p0[(height>>s)+i][(width>>s)+j].w=0;
p0[(height>>s)+i][(width>>s)+j].c=3;
k++;
}
}
}
else break;
}
if(k==clen)break;
}
if(k==clen)break;
}
for(m=0;m<height;m++)
for(int n=0;n<width;n++)
{
if(!(m<(height>>N1)&&n<(width>>N1)))
{
pd[m][n]+=p0[m][n].w;
}
}
for(int m=0;m<height;m++)
for(int n=0;n<width;n++)
{
if(m<(height>>N1)&&n<(width>>N1))
{
p0[m][n].w=pd[m][n];
}
else
{
p0[m][n].w=0;
}
p0[m][n].c=5;
}
if(k==clen)break;
T/=2;
}
for(l=0;l<height;l++)
{
delete p0[l];
}
delete p0;
}
BYTE* press(BYTE* c,int len)
{
int plen;
if(len%4==0)plen=len/4;
else plen=len/4+1;
BYTE* p=new BYTE[plen];
for(int i=0;i<len/4;i++)
{
BYTE pc[4];
for(int k=0;k<4;k++)
{
switch(c[4*i+k])
{
case 1:pc[k]=0;break;
case 2:pc[k]=1;break;
case 3:pc[k]=2;break;
case 4:pc[k]=3;break;
}
}
p[i]=((pc[0]<<6)|(pc[1]<<4)|(pc[2]<<2)|pc[3]);
}
if(len%4)
{
p[len/4]=0;
BYTE pc[4];
for(int i=0;i<len%4;i++)
{
switch(c[4*(plen-1)+i])
{
case 1:pc[i]=0;break;
case 2:pc[i]=1;break;
case 3:pc[i]=2;break;
case 4:pc[i]=3;break;
}
p[len/4]=(p[len/4]|((pc[i]<<(2*(3-i)))));
}
}
return p;
}
BYTE* express(BYTE* p,int len)
{
BYTE* c=new BYTE[len];
for(int i=0;i<len/4;i++)
{
c[4*i+0]=((p[i]>>6)&0x03)+1;
c[4*i+1]=((p[i]>>4)&0x03)+1;
c[4*i+2]=((p[i]>>2)&0x03)+1;
c[4*i+3]=((p[i])&0x03)+1;
}
for(i=0;i<len%4;i++)
{
c[4*(len/4)+i]=((p[len/4]>>(2*(3-i)))&0x03)+1;
}
return c;
}
int dt(BYTE x)
{
if(x==0)return 0;
else return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -