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

📄 f_decode.cpp

📁 基于块方向的图像无损压缩代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//	for(i=0;i<DD1;i++)
//	{
//		h1[i]=h1[i]/sqrt(2.0);
//		g1[i]=g1[i]/sqrt(2.0);
//	}
	delete p1;

/*************************************
define the WAVELET_COEFFICIENT 

**************************************/

	float *WAVELET_COEFFICIENT;

	if((WAVELET_COEFFICIENT=new float [wide*deep]) == NULL)
    {
		AfxMessageBox("Memory allocate error!");
  		ErrorSet = TRUE;
		return ;
    }           

	I_Q(WAVELET_COEFFICIENT,Image, Q,Z,C,wide,deep);
	delete Image;

	v2=(long)wide*deep;

	long xlength,ylength,length;
	xlength=((wide+1)/2+1)/2;
	ylength=((deep+1)/2+1)/2;
	length=xlength*ylength;

	if((im1=new float [length]) == NULL)
	{
		AfxMessageBox("Memory allocate error!");
  		ErrorSet = TRUE;
		return ;
    }           

	if((im2=new float [length]) == NULL)
	{
		AfxMessageBox("Memory allocate error!");
  		ErrorSet = TRUE;
		return ;
    }      
	
	if((im3=new float [length]) == NULL)
	{
		AfxMessageBox("Memory allocate error!");
  		ErrorSet = TRUE;
		return ;
    }
	
	if((im4=new float [length]) == NULL)
	{
		AfxMessageBox("Memory allocate error!");
  		ErrorSet = TRUE;
		return ;
    }           
	if((im5=new float [length]) == NULL)
	{
		AfxMessageBox("Memory allocate error!");
  		ErrorSet = TRUE;
		return ;
    }           
	if((im6=new float [length]) == NULL)
	{
		AfxMessageBox("Memory allocate error!");
  		ErrorSet = TRUE;
		return ;
    }           
	
	if((im7=new float [length]) == NULL)
	{
		AfxMessageBox("Memory allocate error!");
  		ErrorSet = TRUE;
		return ;
    }      

	if((im8=new float [length]) == NULL)
	{
		AfxMessageBox("Memory allocate error!");
  		ErrorSet = TRUE;
		return ;
    }      
	
	if((im9=new float [length]) == NULL)
	{
		AfxMessageBox("Memory allocate error!");
  		ErrorSet = TRUE;
		return ;
    }           
	
	if((im10=new float [length]) == NULL)
	{
		AfxMessageBox("Memory allocate error!");
  		ErrorSet = TRUE;
		return ;
    }           

	if((im11=new float [length]) == NULL)
	{
		AfxMessageBox("Memory allocate error!");
  		ErrorSet = TRUE;
		return ;
    }           

	if((im12=new float [length]) == NULL)
	{
		AfxMessageBox("Memory allocate error!");
  		ErrorSet = TRUE;
		return ;
    }      
	
	if((im13=new float [length]) == NULL)
	{
		AfxMessageBox("Memory allocate error!");
  		ErrorSet = TRUE;
		return ;
    }
	
	if((im14=new float [length]) == NULL)
	{
		AfxMessageBox("Memory allocate error!");
  		ErrorSet = TRUE;
		return ;
    }           

	if((im15=new float [length]) == NULL)
	{
		AfxMessageBox("Memory allocate error!");
  		ErrorSet = TRUE;
		return ;
    }           
	
	if((im16=new float [length]) == NULL)
	{
		AfxMessageBox("Memory allocate error!");
  		ErrorSet = TRUE;
		return ;
    }           

	if((buf1=new float [length]) == NULL)
	{
		AfxMessageBox("Memory allocate error!");
  		ErrorSet = TRUE;
		return ;
    }           
 
	if((buf2=new float [length]) == NULL)
	{
		AfxMessageBox("Memory allocate error!");
  		ErrorSet = TRUE;
		return ;
    }           
	if((buf3=new float [length]) == NULL)
	{
		AfxMessageBox("Memory allocate error!");
  		ErrorSet = TRUE;
		return ;
    }           

	/****0234*****************/
	long xLow,xHigh,yLow,yHigh;
	long start;
	long n;

	xlength=wide;
	ylength=deep;
	for(i=0;i<4;i++)
	{
		xlength=(xlength+1)>>1;
		ylength=(ylength+1)>>1;
	}

	xLow=(xlength+1)>>1;
	yLow=(ylength+1)>>1;
	xHigh=xlength-xLow;
	yHigh=ylength-yLow;
	
	start=0;
	length=xLow*yLow;
	for(i=0;i<length;i++) *(im1+i)=*(WAVELET_COEFFICIENT+i);
	start+=length;
	length=xHigh*yLow;
	for(i=0;i<length;i++)   *(im2+i)=*(WAVELET_COEFFICIENT+i+start);
	start+=length;
	length=xLow*yHigh;
	for(i=0;i<length;i++) *(im3+i)=*(WAVELET_COEFFICIENT+i+start);
	start+=length;
	length=xHigh*yHigh;
	for(i=0;i<length;i++) *(im4+i)=*(WAVELET_COEFFICIENT+i+start);  

	I_CHANGE_DATA(buf1,im1,im2,im3,im4,xlength,ylength);
	iwt(xlength,ylength,buf1,h1,g1);

	/***(0-3),4------18*****/
	long xSubbandLength[17],ySubbandLength[17];
	xlength=((wide+1)/2+1)/2;
	ylength=((deep+1)/2+1)/2;

	CalculateSubbandLength_8(xlength,ylength,xSubbandLength,ySubbandLength);

	start+=length;
	length=xSubbandLength[2]*ySubbandLength[2];
	for(n=0;n<length;n++)
		*(im2+n)=*(WAVELET_COEFFICIENT+n+start);
	
	start+=length;
	length=xSubbandLength[3]*ySubbandLength[3];
	for(n=0;n<length;n++)
		*(im3+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[4]*ySubbandLength[4];
	for(n=0;n<length;n++)
		*(im4+n)=*(WAVELET_COEFFICIENT+n+start);
	
	start+=length;
	length=xSubbandLength[6]*ySubbandLength[6];
	for(n=0;n<length;n++)
		*(im6+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[5]*ySubbandLength[5];
	for(n=0;n<length;n++)
		*(im5+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[8]*ySubbandLength[8];
	for(n=0;n<length;n++)
		*(im8+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[7]*ySubbandLength[7];
	for(n=0;n<length;n++)
		*(im7+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[11]*ySubbandLength[11];
	for(n=0;n<length;n++)
		*(im11+n)=*(WAVELET_COEFFICIENT+n+start);
	
	start+=length;
	length=xSubbandLength[12]*ySubbandLength[12];
	for(n=0;n<length;n++)
		*(im12+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[9]*ySubbandLength[9];
	for(n=0;n<length;n++)
		*(im9+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[10]*ySubbandLength[10];
	for(n=0;n<length;n++)
		*(im10+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[16]*ySubbandLength[16];
	for(n=0;n<length;n++)
		*(im16+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[15]*ySubbandLength[15];
	for(n=0;n<length;n++)
		*(im15+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[14]*ySubbandLength[14];
	for(n=0;n<length;n++)
		*(im14+n)=*(WAVELET_COEFFICIENT+n+start);
	
	start+=length;
	length=xSubbandLength[13]*ySubbandLength[13];
	for(n=0;n<length;n++)
		*(im13+n)=*(WAVELET_COEFFICIENT+n+start);

	IW8(buf1,xlength,ylength,buf1,im2,im3,im4,im5,im6,im7,im8,im9,im10,im11,im12,im13,im14,im15,im16,h1,g1);

	////19-34
	xlength=((wide+1)/2)/2;
	ylength=((deep+1)/2+1)/2;
	
	CalculateSubbandLength_8(xlength,ylength,xSubbandLength,ySubbandLength);

	start+=length;
	length=xSubbandLength[5]*ySubbandLength[5];
	for(n=0;n<length;n++)
		*(im5+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[6]*ySubbandLength[6];
	for(n=0;n<length;n++)
		*(im6+n)=*(WAVELET_COEFFICIENT+n+start);
	
	start+=length;
	length=xSubbandLength[7]*ySubbandLength[7];
	for(n=0;n<length;n++)
		*(im7+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[8]*ySubbandLength[8];
	for(n=0;n<length;n++)
		*(im8+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[2]*ySubbandLength[2];
	for(n=0;n<length;n++)
		*(im2+n)=*(WAVELET_COEFFICIENT+n+start);
	
	start+=length;
	length=xSubbandLength[1]*ySubbandLength[1];
	for(n=0;n<length;n++)
		*(im1+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[4]*ySubbandLength[4];
	for(n=0;n<length;n++)
		*(im4+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[3]*ySubbandLength[3];
	for(n=0;n<length;n++)
		*(im3+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[15]*ySubbandLength[15];
	for(n=0;n<length;n++)
		*(im15+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[16]*ySubbandLength[16];
	for(n=0;n<length;n++)
		*(im16+n)=*(WAVELET_COEFFICIENT+n+start);
	
	start+=length;
	length=xSubbandLength[13]*ySubbandLength[13];
	for(n=0;n<length;n++)
		*(im13+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[14]*ySubbandLength[14];
	for(n=0;n<length;n++)
		*(im14+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[12]*ySubbandLength[12];
	for(n=0;n<length;n++)
		*(im12+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[11]*ySubbandLength[11];
	for(n=0;n<length;n++)
		*(im11+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[10]*ySubbandLength[10];
	for(n=0;n<length;n++)
		*(im10+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[9]*ySubbandLength[9];
	for(n=0;n<length;n++)
		*(im9+n)=*(WAVELET_COEFFICIENT+n+start);
	
	
	IW8(buf2,xlength,ylength,im1,im2,im3,im4,im5,im6,im7,im8,im9,im10,im11,im12,im13,im14,im15,im16,h1,g1);


	////35--50
	xlength=((wide+1)/2+1)/2;
	ylength=((deep+1)/2)/2;
	
	CalculateSubbandLength_8(xlength,ylength,xSubbandLength,ySubbandLength);

	start+=length;
	length=xSubbandLength[9]*ySubbandLength[9];
	for(n=0;n<length;n++)
		*(im9+n)=*(WAVELET_COEFFICIENT+n+start);
	
	start+=length;
	length=xSubbandLength[10]*ySubbandLength[10];
	for(n=0;n<length;n++)
		*(im10+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[11]*ySubbandLength[11];
	for(n=0;n<length;n++)
		*(im11+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[12]*ySubbandLength[12];
	for(n=0;n<length;n++)
		*(im12+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[14]*ySubbandLength[14];
	for(n=0;n<length;n++)
		*(im14+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[13]*ySubbandLength[13];
	for(n=0;n<length;n++)
		*(im13+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[16]*ySubbandLength[16];
	for(n=0;n<length;n++)
		*(im16+n)=*(WAVELET_COEFFICIENT+n+start);
	
	start+=length;
	length=xSubbandLength[15]*ySubbandLength[15];
	for(n=0;n<length;n++)
		*(im15+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[3]*ySubbandLength[3];
	for(n=0;n<length;n++)
		*(im3+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[4]*ySubbandLength[4];
	for(n=0;n<length;n++)
		*(im4+n)=*(WAVELET_COEFFICIENT+n+start);
	
	start+=length;
	length=xSubbandLength[1]*ySubbandLength[1];
	for(n=0;n<length;n++)
		*(im1+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[2]*ySubbandLength[2];
	for(n=0;n<length;n++)
		*(im2+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[8]*ySubbandLength[8];
	for(n=0;n<length;n++)
		*(im8+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[7]*ySubbandLength[7];
	for(n=0;n<length;n++)
		*(im7+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[6]*ySubbandLength[6];
	for(n=0;n<length;n++)
		*(im6+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[5]*ySubbandLength[5];
	for(n=0;n<length;n++)
		*(im5+n)=*(WAVELET_COEFFICIENT+n+start);

	IW8(buf3,xlength,ylength,im1,im2,im3,im4,im5,im6,im7,im8,im9,im10,im11,im12,im13,im14,im15,im16,h1,g1);

	/*******(0-50,)51 52-----------63*************/   
	xlength=wide;
	ylength=deep;
	
	CalculateSubbandLength_8(xlength,ylength,xSubbandLength,ySubbandLength);

	start+=length;
	length=xSubbandLength[4]*ySubbandLength[4];
	for(n=0;n<length;n++)
		*(im4+n)=*(WAVELET_COEFFICIENT+n+start);
	
	start+=length;
	length=xSubbandLength[6]*ySubbandLength[6];
	for(n=0;n<length;n++)
		*(im6+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[5]*ySubbandLength[5];
	for(n=0;n<length;n++)
		*(im5+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[8]*ySubbandLength[8];
	for(n=0;n<length;n++)
		*(im8+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[7]*ySubbandLength[7];
	for(n=0;n<length;n++)
		*(im7+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[11]*ySubbandLength[11];
	for(n=0;n<length;n++)
		*(im11+n)=*(WAVELET_COEFFICIENT+n+start);
	
	start+=length;
	length=xSubbandLength[12]*ySubbandLength[12];
	for(n=0;n<length;n++)
		*(im12+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[9]*ySubbandLength[9];
	for(n=0;n<length;n++)
		*(im9+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[10]*ySubbandLength[10];
	for(n=0;n<length;n++)
		*(im10+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[16]*ySubbandLength[16];
	for(n=0;n<length;n++)
		*(im16+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[15]*ySubbandLength[15];
	for(n=0;n<length;n++)
		*(im15+n)=*(WAVELET_COEFFICIENT+n+start);

	start+=length;
	length=xSubbandLength[14]*ySubbandLength[14];
	for(n=0;n<length;n++)
		*(im14+n)=*(WAVELET_COEFFICIENT+n+start);
	
	start+=length;
	length=xSubbandLength[13]*ySubbandLength[13];
	for(n=0;n<length;n++)
		*(im13+n)=*(WAVELET_COEFFICIENT+n+start);

	if((buffer=new float [v2]) ==NULL)
	{
		AfxMessageBox("memory allocate error");
  		ErrorSet = TRUE;
		return;
	}

	IW8(buffer,wide,deep,buf1,buf2,buf3,im4,im5,im6,im7,im8,im9,im10,im11,im12,im13,im14,im15,im16,h1,g1);

	if((pc=new unsigned char [v2])==NULL)
	{
		AfxMessageBox("Global Lock error");
		ErrorSet = TRUE;
		return;
	}             
     
	for(i=0;i<wide*deep;i++)
	{
		*(buffer+i)=*(buffer+i)*R+M;
		if(*(buffer+i)<0)  *(buffer+i)=0;
		else if(*(buffer+i)>255) *(buffer+i)=255;
		else *(buffer+i)+=0.5;
		*(pc+i)=(unsigned char)(*(buffer+i));
	}

	CreateBitmapFile(OutputFileName,pc,wide,deep);

	delete im1,im2,im3,im4,im5,im6,im7,im8,im9;
	delete im10,im11,im12,im13,im14,im15,im16;
	delete pc,buffer,buf1,buf2,buf3,WAVELET_COEFFICIENT;
}

⌨️ 快捷键说明

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