コード例 #1
0
        static private byte[] HuffmanDecode(byte[] packed, int unpacked_size)
        {
            var dst     = new byte[unpacked_size];
            var decoder = new HuffmanDecoder(packed, dst);

            return(decoder.Unpack());
        }
コード例 #2
0
 public DefaultFileDecoder(WeightsTable weightsTable, IDecodingInputStream inputStream, long length, HuffmanDecoder decoder)
 {
     this.weightsTable = weightsTable;
     this.inputStream  = inputStream;
     this.length       = length;
     this.decoder      = decoder;
 }
コード例 #3
0
 private void button2_Click(object sender, EventArgs e)
 {
     if (openFileDialog2.ShowDialog() == DialogResult.OK)
     {
         var decoder = new HuffmanDecoder(openFileDialog2.FileName);
         decoder.Decode();
     }
 }
コード例 #4
0
ファイル: HuffmanTest.cs プロジェクト: ringostarr80/hpack
 private static void roundTrip(HuffmanEncoder encoder, HuffmanDecoder decoder, byte[] buf)
 {
     using(var baos = new MemoryStream()) {
         using(var dos = new BinaryWriter(baos)) {
             encoder.Encode(dos, buf);
             var actualBytes = decoder.Decode(baos.ToArray());
             Assert.IsTrue(buf.SequenceEqual(actualBytes));
         }
     }
 }
コード例 #5
0
        public SourceFile Run(EncodedFile encoded, string outputPath)
        {
            var rleDecoder     = new RleDecoder();
            var huffmanDecoder = new HuffmanDecoder(encoded.Header.HuffmanMetadata);

            var bytes   = encoded.Content.ToArray();
            var decoded = huffmanDecoder.Decode(bytes);
            var outRle  = rleDecoder.Decode(decoded);

            return(new SourceFile(outputPath, outRle, encoded.Header.SourceExtension));
        }
コード例 #6
0
        public SourceFile Run(EncodedFile encoded, string outputPath)
        {
            var lzwDecoder     = new LZWDecompress();
            var huffmanDecoder = new HuffmanDecoder(encoded.Header.HuffmanMetadata);

            var bytes   = encoded.Content.ToArray();
            var decoded = huffmanDecoder.Decode(bytes);
            var input   = Encoding.ASCII.GetString(decoded);
            var outLzw  = lzwDecoder.Decompress(input);

            return(new SourceFile(outputPath, outLzw, encoded.Header.SourceExtension));
        }
コード例 #7
0
        public UserControlHuffman()
        {
            InitializeComponent();

            var dependencyResolver = new DependencyResolver();

            huffmanEncoder = (HuffmanEncoder)dependencyResolver.GetObject <IHuffmanEncoder>();
            huffmanDecoder = (HuffmanDecoder)dependencyResolver.GetObject <IHuffmanDecoder>();

            textBoxCodes.Font = new Font(FontFamily.GenericMonospace, textBoxCodes.Font.Size);

            UpdateButtonsEnabledProperty();
        }
        public void Setup()
        {
            var dependencyResolver = new DependencyResolver();

            huffmanEncoder = (HuffmanEncoder)dependencyResolver.GetObject <IHuffmanEncoder>();
            huffmanDecoder = (HuffmanDecoder)dependencyResolver.GetObject <IHuffmanDecoder>();

            filePathSource      = $"{Environment.CurrentDirectory}\\temp.png";
            filePathEncodedFile = $"{Environment.CurrentDirectory}\\temp.png.hs";
            filePathDecodedFile = $"{Environment.CurrentDirectory}\\temp.png.hs.png";

            TestMethods.CreateBmpFileFromImage(filePathSource, Resources.Capture);
        }
コード例 #9
0
        private static string DecodeWithHuffman(string dictFilename, byte[] bytes)
        {
            var serializedDict = File.ReadAllText(dictFilename);
            var rates          = serializedDict.Split('操').Select(x =>
            {
                var chr  = x[0];
                var rate = int.Parse(x.Substring(1, x.Length - 1));
                return(new { chr, rate });
            }).ToDictionary(x => x.chr, x => x.rate);
            var huffmanTree = new HuffmanDecoder();

            huffmanTree.BuildWithRates(rates);
            return(huffmanTree.Decode(new BitArray(bytes)));
        }
コード例 #10
0
        public void Setup()
        {
            characterStatisticsFromMock = ConstantsEncodingSystems.TextCharacterStatistics1;
            encodedBytesFromMock        = ConstantsEncodingSystems.EncodedBytes1();

            huffmanReaderMock = new Mock <IHuffmanHeaderReader>();
            huffmanEncodedBytesManagerMock = new Mock <IHuffmanEncodedBytesManager>();
            fileReaderMock = new Mock <IFileReader>();
            fileWriterMock = new Mock <IFileWriter>();

            huffmanDecoder = new HuffmanDecoder(huffmanReaderMock.Object, huffmanEncodedBytesManagerMock.Object);

            SetupHuffmanReaderMock();
            SetupHuffmanEncodedBytesManagerMock();
            SetupFileReaderMock();
        }
コード例 #11
0
        public void Decode_FourSymbols_DeepTree()
        {
            //given
            var tree    = MockHuffmanTreeBuilder.Build('a', '#', 'b', '#', 'c', 'd');
            var decoder = new HuffmanDecoder <char>(tree);
            var input   = new MockDecoderInput(new List <int> {
                0, 1, 0, 1, 1, 0, 1, 1, 1
            });
            var output = new MockDecoderOutput(new List <char> {
                'a', 'b', 'c', 'd'
            });

            //when
            decoder.Decode(input, output);
            //then
            output.AssertCorrectOutput();
        }
コード例 #12
0
        public void Decode_ThreeSymbols_TwoAreRight()
        {
            //given
            var tree    = MockHuffmanTreeBuilder.Build('c', '#', 'x', 'a');
            var decoder = new HuffmanDecoder <char>(tree);
            var input   = new MockDecoderInput(new List <int> {
                0, 1, 1, 1, 0
            });
            var output = new MockDecoderOutput(new List <char> {
                'c', 'a', 'x'
            });

            //when
            decoder.Decode(input, output);
            //then
            output.AssertCorrectOutput();
        }
コード例 #13
0
ファイル: ArcAOS.cs プロジェクト: LFYG/GARbro
        public override Stream OpenEntry(ArcFile arc, Entry entry)
        {
            var aent = entry as PackedEntry;

            if (null == aent || !aent.IsPacked)
            {
                return(base.OpenEntry(arc, entry));
            }

            aent.UnpackedSize = arc.File.View.ReadUInt32(entry.Offset);
            var packed   = arc.File.View.ReadBytes(entry.Offset + 4, entry.Size - 4);
            var unpacked = new byte[aent.UnpackedSize];

            var decoder = new HuffmanDecoder(packed, unpacked);

            decoder.Unpack();
            return(new BinMemoryStream(unpacked, entry.Name));
        }
コード例 #14
0
        public override object Decode(Stream stream)
        {
            byte num = stream.CreateSuitableBinaryReader().ReadByte();

            byte[] numArray;
            try
            {
                numArray = HuffmanDecoder.Decode(stream);
            }
            catch (Exception ex)
            {
                throw new CodecException("Unable to decode", ex);
            }
            byte[] buffer = numArray != null ? new byte[numArray.Length + 1] : throw new CodecException("Unable to decode");
            buffer[0] = num;
            Buffer.BlockCopy(numArray, 0, buffer, 1, numArray.Length);
            using (MemoryStream memoryStream = new MemoryStream(buffer))
                return(base.Decode(memoryStream));
        }
コード例 #15
0
ファイル: ArcAOS.cs プロジェクト: y111303tut/GARbro
        public override Stream OpenEntry(ArcFile arc, Entry entry)
        {
            var aent = entry as AosEntry;

            if (null == aent || !aent.IsCompressed)
            {
                return(base.OpenEntry(arc, entry));
            }

            uint unpacked_size = arc.File.View.ReadUInt32(entry.Offset);
            var  packed        = new byte[entry.Size - 4];

            arc.File.View.Read(entry.Offset + 4, packed, 0, (uint)packed.Length);
            var unpacked = new byte[unpacked_size];

            var decoder = new HuffmanDecoder(packed, unpacked);

            decoder.Unpack();
            return(new BinMemoryStream(unpacked, entry.Name));
        }
コード例 #16
0
 public DefaultStreamParser()
 {
     this.decoder = new HuffmanDecoder();
 }
コード例 #17
0
ファイル: HuffmanTest.cs プロジェクト: ringostarr80/hpack
 private static void roundTrip(HuffmanEncoder encoder, HuffmanDecoder decoder, string s)
 {
     roundTrip(encoder, decoder, Encoding.UTF8.GetBytes(s));
 }
コード例 #18
0
ファイル: ImageCGD.cs プロジェクト: x132321/GARbro
        internal static void DecompressHuffman(IBinaryStream input, byte[] output)
        {
            var decomp = new HuffmanDecoder(input);

            decomp.Unpack(output);
        }