public void Extract(SequentialReader reader, HuffmanTablesDirectory directory) { try { while (reader.Available() > 0) { byte header = reader.GetByte(); HuffmanTableClass tableClass = HuffmanTable.TypeOf((header & 0xF0) >> 4); int tableDestinationId = header & 0xF; byte[] lBytes = GetBytes(reader, 16); int vCount = 0; foreach (byte b in lBytes) { vCount += (b & 0xFF); } byte[] vBytes = GetBytes(reader, vCount); directory.AddTable(new HuffmanTable(tableClass, tableDestinationId, lBytes, vBytes)); } } catch (IOException me) { directory.AddError(me.ToString()); } }
public void AddTable(HuffmanTable table) { _tables.Add(table); // update the number-of-tables tag with the current count Set(TagNumberOfTables, _tables.Count); }