protected static void dequantization_Component(short[,] compontent, TS_RFX_CODEC_QUANT tsRfxCodecQuant, bool useReduceExtrapolate)
        {
            // Quantization factor: HL1, LH1, HH1, HL2, LH2, HH2, HL3, LH3, HH3, LL3
            Hashtable scaleValueTable = new Hashtable();
            int       HL1_Factor      = tsRfxCodecQuant.HL1_HH1 & 0x0f;
            int       LH1_Factor      = (tsRfxCodecQuant.HH2_LH1 & 0xf0) >> 4;
            int       HH1_Factor      = (tsRfxCodecQuant.HL1_HH1 & 0xf0) >> 4;
            int       HL2_Factor      = (tsRfxCodecQuant.LH2_HL2 & 0xf0) >> 4;
            int       LH2_Factor      = tsRfxCodecQuant.LH2_HL2 & 0x0f;
            int       HH2_Factor      = tsRfxCodecQuant.HH2_LH1 & 0x0f;
            int       HL3_Factor      = tsRfxCodecQuant.HL3_HH3 & 0x0f;
            int       LH3_Factor      = (tsRfxCodecQuant.LL3_LH3 & 0xf0) >> 4;
            int       HH3_Factor      = (tsRfxCodecQuant.HL3_HH3 & 0xf0) >> 4;
            int       LL3_Factor      = tsRfxCodecQuant.LL3_LH3 & 0x0f;

            int[] HL_Factor = { HL1_Factor, HL2_Factor, HL3_Factor };
            int[] LH_Factor = { LH1_Factor, LH2_Factor, LH3_Factor };
            int[] HH_Factor = { HH1_Factor, HH2_Factor, HH3_Factor };

            BandType_Values[] bandArr    = new BandType_Values[] { BandType_Values.HL1, BandType_Values.LH1, BandType_Values.HH1, BandType_Values.HL2, BandType_Values.LH2, BandType_Values.HH2, BandType_Values.HL3, BandType_Values.LH3, BandType_Values.HH3, BandType_Values.LL3 };
            int[]             bandFactor = new int[] { HL1_Factor, LH1_Factor, HH1_Factor, HL2_Factor, LH2_Factor, HH2_Factor, HL3_Factor, LH3_Factor, HH3_Factor, LL3_Factor };

            for (int i = 0; i < bandArr.Length; i++)
            {
                BandRect br = RdpegfxTileUtils.GetBandRect(bandArr[i], useReduceExtrapolate);
                doDequantization_Subband(compontent, br.left, br.top, br.right, br.bottom, bandFactor[i]);
            }
        }
        /// <summary>
        /// Get the Rect area of a band
        /// </summary>
        /// <param name="band">the band type</param>
        /// <param name="useReduceExtrapolate">indicates if Reduce-Extrapolate method used</param>
        /// <returns>The band rect area</returns>
        public static BandRect GetBandRect(BandType_Values band, bool useReduceExtrapolate)
        {
            BandRect br      = new BandRect();
            int      bandIdx = (int)band;

            if (useReduceExtrapolate)
            {
                br.left   = BandRectMap_ReduceExtrapolate[bandIdx, 0];
                br.top    = BandRectMap_ReduceExtrapolate[bandIdx, 1];
                br.right  = BandRectMap_ReduceExtrapolate[bandIdx, 2];
                br.bottom = BandRectMap_ReduceExtrapolate[bandIdx, 3];
            }
            else
            {
                br.left   = BandRectMap[bandIdx, 0];
                br.top    = BandRectMap[bandIdx, 1];
                br.right  = BandRectMap[bandIdx, 2];
                br.bottom = BandRectMap[bandIdx, 3];
            }
            return(br);
        }
 /// <summary>
 /// Get the Rect area of a band
 /// </summary>
 /// <param name="band">the band type</param>
 /// <param name="useReduceExtrapolate">indicates if Reduce-Extrapolate method used</param>
 /// <returns>The band rect area</returns>
 public static BandRect GetBandRect(BandType_Values band, bool useReduceExtrapolate)
 {
     BandRect br = new BandRect();
     int bandIdx = (int)band;
     if (useReduceExtrapolate)
     {
         br.left = BandRectMap_ReduceExtrapolate[bandIdx, 0];
         br.top = BandRectMap_ReduceExtrapolate[bandIdx, 1];
         br.right = BandRectMap_ReduceExtrapolate[bandIdx, 2];
         br.bottom = BandRectMap_ReduceExtrapolate[bandIdx, 3];
     }
     else
     {
         br.left = BandRectMap[bandIdx, 0];
         br.top = BandRectMap[bandIdx, 1];
         br.right = BandRectMap[bandIdx, 2];
         br.bottom = BandRectMap[bandIdx, 3];
     }
     return br;
 }