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

📄 imgcomdata.cpp

📁 jpeg 2000 压缩算法源代码 核心ebcot
💻 CPP
字号:
_pEncoderSpec->pSegSymbol->GetTileComVal(nTileNumber,nComNumber))
	{
		temp|=OPT_SEG_MARKERS;
	}
	
	m_pHeadBuffer->writeByte(temp);

	temp=0;
	
	if (m_pEncoderSpec->pWTFilter->GetTileComVal(nTileNumber,nComNumber)==INT53)
	{
		temp=1;

	}

	m_pHeadBuffer->writeByte(temp);


	if (bPrecinctUsed)
	{
		
		CSizVector *PrecinctSizeDef=&(m_pEncoderSpec->pPrecinctSize->GetTileComVal(nTileNumber,nComNumber));

		int veclenth=PrecinctSizeDef->GetSize();

		int lev;
		int nPPX,nPPY;
		CSiz resPrecinct;
		int tt=0;

		for (lev=nDecLev;lev>=0;lev--)
		{
			temp=0;
			tt=0;

			if (lev>=veclenth)
			{
				resPrecinct=PrecinctSizeDef->GetAt(veclenth-1);
			}
			else
			{
				resPrecinct=PrecinctSizeDef->GetAt(lev);
			}
				
			nPPX=resPrecinct.GetWidth();
			nPPY=resPrecinct.GetHeight();


			temp=(BYTE)((nPPY<<4)&(0xf0));
			temp|=(BYTE)(nPPX &0x0f);
			
			m_pHeadBuffer->writeByte((BYTE)temp);
				
			}
		}
	




}

void CHeaderEncoder::WriteMainQCD()
{
//	int nComNumber;
	int nDecLev=m_pEncoderSpec->pWTDecLev->GetDefault();

	int *tcIdx=m_pEncoderSpec->pWTDecLev->GetDefRep();

	

	QuantizerType eQuanType=m_pEncoderSpec->pQuantizerType->GetDefault();

	m_pHeadBuffer->writeWord(QCD);

	int marklenth;
	int GuardBits=m_pEncoderSpec->pGuardBits->GetDefault();
 
	BYTE Sqcd=0;
	Sqcd=((BYTE)GuardBits)<<SQCX_GB_SHIFT;

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

	if (tcIdx[0]<0||tcIdx[1]<0)
	{
    	delete []tcIdx;
		printf("tile or component index exceeds!\n");
		return ;
	}

	CTileBlkWTData *pCodedTileBlkWTData=m_pCodedImgData->GetTileBlkWTData(tcIdx[0],tcIdx[1]);


	delete []tcIdx;

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

	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&SQCX_EXP_MASK));

		   }
		  


		}
		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();

⌨️ 快捷键说明

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