📄 coder.h
字号:
#include "WAVELET.h"
struct wn
{
FW w;
BYTE c;
};
struct EZWFile
{
int height;
int width;
int height_s;
int width_s;
int scale;
int TH;
int rc_L;
int gc_L;
int bc_L;
};
int encoder(FW** pd,BYTE* c,int height,int width,int N1,int T,int TN)
{
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++)
{
p0[m][n].w=pd[m][n];
p0[m][n].c=5;
}
for(m=0;m<height;m++)
for(int n=0;n<width;n++)
{
p0[m][n].w=pd[m][n];
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].w>=T)
{
c[k]=1;
p0[i][(width>>s)+j].c=1;
p0[i][(width>>s)+j].w-=T;
//p0[i][(width>>s)+j].w=0;
k++;
}
else if(p0[i][(width>>s)+j].w<=-T)
{
c[k]=4;
p0[i][(width>>s)+j].c=4;
p0[i][(width>>s)+j].w+=T;
//p0[i][(width>>s)+j].w=0;
k++;
}
else
{
if(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++)
{
if(abs(p0[(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[(i<<(s-l))+g][(width>>l)+(j<<(s-l))+h].c=2;
}
}
c[k]=2;
}
k++;
}
}
}
////////////////////////////////////1
for(i=0;i<(height>>s);i++)
for(int j=0;j<(width>>s);j++)
{
if(p0[(height>>s)+i][j].w>=T)
{
c[k]=1;
p0[(height>>s)+i][j].c=1;
p0[(height>>s)+i][j].w-=T;
//p0[(height>>s)+i][j].w=0;
k++;
}
else if(p0[(height>>s)+i][j].w<=-T)
{
c[k]=4;
p0[(height>>s)+i][j].c=4;
p0[(height>>s)+i][j].w+=T;
//p0[(height>>s)+i][j].w=0;
k++;
}
else
{
if(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++)
{
if(abs(p0[(height>>l)+(i<<(s-l))+g][(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][(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;
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;
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].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 decoder(FW** pd,BYTE* c,int height,int width,int N1,int T,int TN)
{
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(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++;
}
}
}
////////////////////////////////////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)
{
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++;
}
}
}
///////////////////////////////////////////////////////
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)
{
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++;
}
}
}
}
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;
}
int encoderD(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++)
{
p0[m][n].w=pd[m][n];
p0[m][n].c=5;
}
for(m=0;m<height;m++)
for(int n=0;n<width;n++)
{
p0[m][n].w=pd[m][n];
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].w>=T)
{
c[k]=1;
p0[i][(width>>s)+j].c=1;
////////////////////////////////////
if(p0[i][(width>>s)+j].w>=1.5*T)
{
cs[ks]=1;
}
else
{
cs[ks]=0;
}
ks++;
////////////////////////////////////
p0[i][(width>>s)+j].w=0;
k++;
}
else if(p0[i][(width>>s)+j].w<=-T)
{
c[k]=4;
p0[i][(width>>s)+j].c=4;
////////////////////////////////////
if(p0[i][(width>>s)+j].w<=-1.5*T)
{
cs[ks]=1;
}
else
{
cs[ks]=0;
}
ks++;
////////////////////////////////////
p0[i][(width>>s)+j].w=0;
k++;
}
else
{
if(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++)
{
if(abs(p0[(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[(i<<(s-l))+g][(width>>l)+(j<<(s-l))+h].c=2;
}
}
c[k]=2;
}
k++;
}
}
}
////////////////////////////////////1
for(i=0;i<(height>>s);i++)
for(int j=0;j<(width>>s);j++)
{
if(p0[(height>>s)+i][j].w>=T)
{
c[k]=1;
p0[(height>>s)+i][j].c=1;
////////////////////////////////////
if(p0[(height>>s)+i][j].w>=1.5*T)
{
cs[ks]=1;
}
else
{
cs[ks]=0;
}
ks++;
////////////////////////////////////
p0[(height>>s)+i][j].w=0;
k++;
}
else if(p0[(height>>s)+i][j].w<=-T)
{
c[k]=4;
p0[(height>>s)+i][j].c=4;
////////////////////////////////////
if(p0[(height>>s)+i][j].w<=-1.5*T)
{
cs[ks]=1;
}
else
{
cs[ks]=0;
}
ks++;
////////////////////////////////////
p0[(height>>s)+i][j].w=0;
k++;
}
else
{
if(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++)
{
if(abs(p0[(height>>l)+(i<<(s-l))+g][(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++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -