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

📄 decoderspec.cpp

📁 jpeg 2000 压缩算法源代码 核心ebcot
💻 CPP
字号:
ntizer::QSTEP_MAX_EXPONENT=(1<<QSTEP_EXPONENT_BITS)-1;
int CDeQuantizer::QSTEP_MAX_MANTISSA=(1<<QSTEP_MANTISSA_BITS)-1;



CDeQuantizer::CDeQuantizer()
{

}

CDeQuantizer::~CDeQuantizer()
{

}

CDeQuantizer::CDeQuantizer(CImgBlkWTData &ImgBlkWTData, CDecoderSpec &DecoderSpec)
{
	pGuardBits=DecoderSpec.pGuardBits;
	pQuantizerType=DecoderSpec.pQuantizerType;
	
	int nTileNums,nComNums;

    m_pImgBlkWTData=&ImgBlkWTData;

	nTileNums=m_pImgBlkWTData->GetTileNums();
	nComNums=m_pImgBlkWTData->GetImgComNums();

	int nTileNumber,nComNumber;

	for (nTileNumber=0;nTileNumber<nTileNums;nTileNumber++)
		for (nComNumber=0;nComNumber<nComNums;nComNumber++)
		{
			DeQuanTileComBlkWTData(nTileNumber,nComNumber);
		}
	



}

CDeQuantizer::CDeQuantizer(CQuantizerStd &QuanImgBlkWTData)
{
	pGuardBits=QuanImgBlkWTData.pGuardBits;
	pQuantizerType=QuanImgBlkWTData.pQuantizerType;
	
	int nTileNums,nComNums;

    m_pImgBlkWTData=QuanImgBlkWTData.m_pImgBlkWTData;

	nTileNums=m_pImgBlkWTData->GetTileNums();
	nComNums=m_pImgBlkWTData->GetImgComNums();

	int nTileNumber,nComNumber;

	for (nTileNumber=0;nTileNumber<nTileNums;nTileNumber++)
		for (nComNumber=0;nComNumber<nComNums;nComNumber++)
		{
			DeQuanTileComBlkWTData(nTileNumber,nComNumber);
		}
	


}

void CDeQuantizer::DeQuanTileComBlkWTData(int nTileNumber, int nComNumber)
{
	int nRi=m_pImgBlkWTData->GetImgComBits(nComNumber);
    int nG=pGuardBits->GetTileComVal(nTileNumber,nComNumber);


	QuantizerType eQuantizerType=pQuantizerType->GetTileComVal(nTileNumber,nComNumber);

	CTileBlkWTData *pTileComBlkWTData=m_pImgBlkWTData->GetTileBlkWTData(nTileNumber,nComNumber);

	DataType eDataType=pTileComBlkWTData->GetDataType();

	switch (eQuantizerType)
	{
	case TYPE_NO_QUANT:
		NoDeQuantTileComBlkWTData(pTileComBlkWTData,nRi,nG,eDataType);

		break;
	case TYPE_IMPLICIT_QUANT:
		{

           ImplicitDeQuantTileComBlkWTData(pTileComBlkWTData,nRi,nG, eDataType);


		}
		break;
	case TYPE_EXPLICIT_QUANT:
		{

			ExplicitDeQuantTileComBlkWTData(pTileComBlkWTData,nRi,nG,eDataType);
			
		}
		break;
	default:
		{
			printf("quantize type unknown!\n");
			return;
		}
	}



}

void CDeQuantizer::NoDeQuantTileComBlkWTData(CTileBlkWTData *pTileComBlkWTData, int nRi,int  nG,DataType eDataType)
{
	int nDecLev=pTileComBlkWTData->GetTileDecLev();

	CBandBlkWTData *pTileBlkWTData=pTileComBlkWTData->GetTileBlkWTData();
	CBandBlkWTData *pBandBlkWTData=0;
	CBand *pBand=0;

	int nLev;
	int nEb,nUb=0;
	int nRb;
	int nMb;
	double fBStep=1.0;
	int nBandNumber=1;

	for (nLev=1;nLev<=nDecLev;nLev++)
	{
		/**
		 HL;
		*/
    	nRb=nRi+1;		
		nMb=nG+nRi;
		nEb=nRb;
		pBandBlkWTData=&pTileBlkWTData[nBandNumber++];
		pBand=&(pBandBlkWTData->GetBandInfo());        
	
		SetBandParams(pBand,nRb,nMb,nEb,nUb,fBStep);

		DeQuantBandBlkWTData(pBandBlkWTData,eDataType);




		/**
		LH;
		*/
		pBandBlkWTData=&pTileBlkWTData[nBandNumber++];
		pBand=&(pBandBlkWTData->GetBandInfo());        
	
		SetBandParams(pBand,nRb,nMb,nEb,nUb,fBStep);

		DeQuantBandBlkWTData(pBandBlkWTData,eDataType);


		/**
		HH;
		*/
		nRb=nRi+2;
		nMb=nG-1+nRb;
		nEb=nRb;
	
	    pBandBlkWTData=&pTileBlkWTData[nBandNumber++];
		pBand=&(pBandBlkWTData->GetBandInfo());        
	
		SetBandParams(pBand,nRb,nMb,nEb,nUb,fBStep);

		DeQuantBandBlkWTData(pBandBlkWTData,eDataType);

		
	}

	pBandBlkWTData=&pTileBlkWTData[0];
	pBand=&(pBandBlkWTData->GetBandInfo());        

	nRb=nRi;
	nEb=nRb;
	nMb=nG+nEb-1;
	
	SetBandParams(pBand,nRb,nMb,nEb,nUb,fBStep);

	DeQuantBandBlkWTData(pBan

⌨️ 快捷键说明

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