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

📄 imgcomdatabyte.cpp

📁 jpeg 2000 压缩算法源代码 核心ebcot
💻 CPP
字号:
fo;

	int bandIdx;
    int nEb,nUb;
	WORD usEb,usUb,temp;

	switch (eQuanType)
	{
	case TYPE_NO_QUANT:
		{
		   marklenth=3+nDecLev*3+1;

		   m_pHeadBuffer->writeWord((WORD)marklenth);

		   Sqcd|=(BYTE)SQCX_NO_QUANTIZATION;
		   m_pHeadBuffer->writeByte(Sqcd);


		   for (bandIdx=0;bandIdx<3*nDecLev+1;bandIdx++)
		   {
			   BandInfo=pCodedBandBlkWTData[bandIdx].GetBandInfo();

               nEb=BandInfo.GetEb();

			   m_pHeadBuffer->writeByte((BYTE)(nEb&0x1F));

		   }
		  


		}
		break;
	case TYPE_IMPLICIT_QUANT:
		{
		   marklenth=3+2;

		   m_pHeadBuffer->writeWord((WORD)marklenth);
		   
		   Sqcd|=(BYTE)SQCX_SCALAR_DERIVED;

		   m_pHeadBuffer->writeByte(Sqcd);

		   BandInfo=pCodedBandBlkWTData[0].GetBandInfo();

		   nEb=BandInfo.GetEb();
		   nUb=BandInfo.GetUb();

		   usEb=(WORD)(nEb&CQuantizerStd::QSTEP_MAX_EXPONENT);
           usUb=(WORD)(nUb&CQuantizerStd::QSTEP_MAX_MANTISSA);

		   temp=0;
		   temp=(usEb<<(CQuantizerStd::QSTEP_MANTISSA_BITS))|usUb;

		   m_pHeadBuffer->writeWord(temp);

		
		}
		break;
	case TYPE_EXPLICIT_QUANT:
		{
			marklenth=3+2*(nDecLev*3+1);
		
			m_pHeadBuffer->writeWord((WORD)marklenth);

			Sqcd|=(BYTE)SQCX_SCALAR_EXPOUNDED;
			m_pHeadBuffer->writeByte(Sqcd);

           for (bandIdx=0;bandIdx<3*nDecLev+1;bandIdx++)
		   {
			   BandInfo=pCodedBandBlkWTData[bandIdx].GetBandInfo();

               nEb=BandInfo.GetEb();
			   nUb=BandInfo.GetUb();

			   usEb=(WORD)(nEb&CQuantizerStd::QSTEP_MAX_EXPONENT);
               usUb=(WORD)(nUb&CQuantizerStd::QSTEP_MAX_MANTISSA);

		       temp=0;
		       temp=(usEb<<(CQuantizerStd::QSTEP_MANTISSA_BITS))|usUb;

		       m_pHeadBuffer->writeWord(temp);

		   }
		  


		}
		break;
	default:
		{
			printf("quantizer type unknown!\n");
			return;
		}
	}




}

void CHeaderEncoder::WriteTileQCC(int nTileNumber, int nComNumber)
{
	int nDecLev=m_pEncoderSpec->pWTDecLev->GetTileComVal(nTileNumber,nComNumber);
	
	QuantizerType eQuanType=m_pEncoderSpec->pQuantizerType->GetTileComVal(nTileNumber,nComNumber);


	m_pHeadBuffer->writeWord(QCC);

	int nComNums=m_pCodedImgData->GetImgComNums();
	
	int nCqcclenth=1;
	

	if (nComNums>=257)
	{
		nCqcclenth=2;
	}


	int marklenth;
	int GuardBits=m_pEncoderSpec->pGuardBits->GetTileComVal(nTileNumber,nComNumber);
 
	BYTE Sqcc=0;
	Sqcc=((BYTE)GuardBits)<<SQCX_GB_SHIFT;

	/**
	此处仅考虑mallat二进制塔式小波分解;
	*/


	CTileBlkWTData *pCodedTileBlkWTData=m_pCodedImgData->GetTileBlkWTData(nTileNumber,nComNumber);

	
	CBandBlkWTData *pCodedBandBlkWTData=pCodedTileBlkWTData->GetTileBlkWTData();
	
	CBand BandInfo;

	int bandIdx;
    int nEb,nUb;
	WORD usEb,usUb,temp;

	switch (eQuanType)
	{
	case TYPE_NO_QUANT:
		{
		   marklenth=2+nCqcclenth+nDecLev*3+1;

		   m_pHeadBuffer->writeWord((WORD)marklenth);


		   if (nComNums>=257)
			   m_pHeadBuffer->writeWord((WORD)nComNumber);
		   else
			   m_pHeadBuffer->writeByte((BYTE)nComNumber);

		   Sqcc|=(BYTE)SQC

⌨️ 快捷键说明

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