imgcomdata.h

来自「jpeg 2000 压缩算法源代码 核心ebcot」· C头文件 代码 · 共 90 行

H
90
字号
 eQuanType=m_pEncoderSpec->pQuantizerType->GetCompDef(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->GetCompDef(nComNumber);
 
	BYTE Sqcc=0;
	Sqcc=((BYTE)GuardBits)<<SQCX_GB_SHIFT;

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


	CTileBlkWTData *pCodedTileBlkWTData=m_pCodedImgData->GetTileBlkWTData(tcIdx,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)SQCX_NO_QUANTIZATION;
		   m_pHeadBuffer->writeByte(Sqcc);


		   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=2+nCqcclenth+2;

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

		   m_pHeadBuffer->writeByte(Sqcc);

		   BandInfo=pCodedBandBlkWTData[0].GetBandInfo();

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

		   usEb=(WORD)(nEb&CQuantizerStd::QSTEP_MAX_EX

⌨️ 快捷键说明

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