void BuildPackedTable(HTreeGroup htree_group) { var huff = htree_group.packed_table; for (int code = 0; code < Huffman.PackedTableSize; ++code) { uint bits = (uint)code; var hcode = htree_group.GetCode (HuffIndex.Green, code); if (hcode.value >= Huffman.NumLiteralCodes) { huff[code].bits = hcode.bits + BitsSpecialMarker; huff[code].value = hcode.value; } else { huff[code].bits = 0; huff[code].value = 0; bits >>= AccumulateHCode (hcode, 8, ref huff[code]); bits >>= AccumulateHCode (htree_group.GetCode (HuffIndex.Red, (int)bits), 16, ref huff[code]); bits >>= AccumulateHCode (htree_group.GetCode (HuffIndex.Blue, (int)bits), 0, ref huff[code]); bits >>= AccumulateHCode (htree_group.GetCode (HuffIndex.Alpha, (int)bits), 24, ref huff[code]); } } }