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

📄 user_ini_decode.h

📁 这是我做的毕业设计
💻 H
字号:

extern  unsigned char decode_bmpdata[MapHeight*WIDTHBYTES(MapWidth*24)];
extern int  pYnew[MapHeight*MapWidth];  
extern int  pUnew[MapHeight*MapWidth/4];   
extern int  pVnew[MapHeight*MapWidth/4];  

	void read_YCbCr(short (*s1)[8],short (*s2)[8],short (*s3)[8],short (*s4)[8],short (*sCb)[8],short (*sCr)[8],short j)
	{
		////////////////////////////
		short m,n,n1,n2,n3,n4,*py1,*py2,*py3,*py4,*pcb,*pcr;
		n=j*64;
		//n=j*64;
		n1=n*4;
		n2=n1+64;
		n3=n2+64;
		n4=n3+64;
		
		pcb=(short*)sCb;
		pcr=(short*)sCr;
		py1=(short*)s1;
		py2=(short*)s2;
		py3=(short*)s3;
		py4=(short*)s4;
		
		for(m=0;m<64;m++){
			*(pcr+m)=pVnew[n+m];
			*(pcb+m)=pUnew[n+m];
			*(py1+m)=pYnew[n1+m];
			*(py2+m)=pYnew[n2+m];
			*(py3+m)=pYnew[n3+m];
			*(py4+m)=pYnew[n4+m];
		}
	}

/////离散余弦逆变换 和 逆量化
//   *source)[8]  为要进行离散余弦变换的矩阵 变量
//   *q           为亮度/色度 量化表       
void IDCT_Q(short (*source)[8],short *q)
{
	 int j;
	 short *psource;
	 psource=(short*)source;
	 /*************开始进行逆量化****************/
	 for(j=0;j<64;j++){
		 	psource[j]=(short)(psource[j]*q[j]);
			psource[j+64]=(short)(psource[j+64]*q[j]);
			psource[j+128]=(short)(psource[j+128]*q[j]);
			psource[j+192]=(short)(psource[j+192]*q[j]);
	 }	
	 IMG_idct_8x8(psource,4);    //进行dct 逆变换
} 
//对UV进行 dct 逆变换
//short *q 为量化表
void IDCT_Q_UV(short (*source)[8],short *q)
{
	 int j;
	 short *psource;
	 psource=(short*)source;
	 /*************开始进行逆量化****************/
	 for(j=0;j<64;j++){
		 	psource[j]=(short)(psource[j]*q[j]);
			psource[j+64]=(short)(psource[j+64]*q[j]);
	 }	
	 IMG_idct_8x8(psource,2);    //进行dct 逆变换
} 


void YccToRgb(lastblk tempBGR[16][16],lastblk (*out_Image)[16])
	 {short i,j;
	 int 	pCb2,pCb3,pCr1,pCr2,tempBGR_Cr,tempBGR_Cb,tempBGR_Y;
	 
	 long pY,pCb,pCr;
	 pCr1=140200;
	 
	 pCb2=34414;
	 pCr2=71414;
	 pCb3=177200;
	 
	  for(i=0;i<16;i++)
	  {
	    for(j=0;j<16;j++)
			{
			pY=0;
			pCb=0;
			pCr=0;
			tempBGR_Cr	=tempBGR[i][j].Cr-128;
			tempBGR_Cb	=tempBGR[i][j].Cb-128;
			tempBGR_Y	=100000*tempBGR[i][j].Y;
			
			pY =tempBGR_Y+pCr1*tempBGR_Cr;
			
			pCb=tempBGR_Y-pCb2*tempBGR_Cb;
			pCb=pCb		 -pCr2*tempBGR_Cr;
			
			pCr=tempBGR_Y+pCb3*tempBGR_Cb;
			
			out_Image[i][j].Y =(int)(pY/100000);
			out_Image[i][j].Cb=(int)(pCb/100000);
			out_Image[i][j].Cr=(int)(pCr/100000);
			
			out_Image[i][j].Y=out_Image[i][j].Y<0 ?0 : out_Image[i][j].Y>255 ? 255:out_Image[i][j].Y;
			out_Image[i][j].Cb=out_Image[i][j].Cb<0 ?0 : out_Image[i][j].Cb>255 ? 255:out_Image[i][j].Cb;
			out_Image[i][j].Cr=out_Image[i][j].Cr<0 ?0 : out_Image[i][j].Cr>255 ? 255:out_Image[i][j].Cr;

	  }
	}
}

void save_decode_bmpdata(short s1[8][8],short s2[8][8],short s3[8][8],short s4[8][8],short sCb[8][8],short sCr[8][8],int m)
{	
   	int i,i1,j,j1,k,l,x_y,x,y;
   	YCC yuv,out_yuv;
	for(j=0;j<16;j++){
 		for(i=0;i<16;i++){
 			i1=i%8;
 			j1=j%8;
 			if(j<8){
	 			if(i<8){
	 				yuv[j][i].Y=s1[j][i];

	 				}
	 			else{
	 				yuv[j][i].Y=s2[j][i1];
	 				}
	 			}
	 		else{
	 			if(i<8){
	 				yuv[j][i].Y=s3[j1][i];
	 				}
	 			else{
	 				yuv[j][i].Y=s4[j1][i1];
	 				}
	 		}
	 		yuv[j][i].Cb=sCb[j1][i1];
	 		yuv[j][i].Cr=sCr[j1][i1];
 		}
 	}
 	
   	YccToRgb(yuv,out_yuv);  ///转换Ycbcr--->Redgreenblue
  
   	k=m/8;
   	l=m%8;
   	x=k*16;
   	y=l*16*3;
	for(j=0;j<16;j++){
 		for(i=0;i<16;i++){
	     	x_y=(x+j)*WIDTHBYTES(MapWidth*24)+y+i*3;
		
	     	decode_bmpdata[x_y]=(BYTE)out_yuv[j][i].Y;
			decode_bmpdata[x_y+1]=(BYTE)out_yuv[j][i].Cb;
			decode_bmpdata[x_y+2]=(BYTE)out_yuv[j][i].Cr;

		}
	}
}


⌨️ 快捷键说明

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