FreakySources.Code.AsciimationDataGenerator.Compress_v_1_3 C# (CSharp) Method

Compress_v_1_3() public method

public Compress_v_1_3 ( List &compressedFrames, bool reducedLines = true ) : string
compressedFrames List
reducedLines bool
return string
        public string Compress_v_1_3(out List<CompressedFrame> compressedFrames, bool reducedLines = true)
        {
            var bytesFreqs = GetBytesFreqs(reducedLines, HuffmanRleRepeatedBits);
            var tree = new HuffmanTree(bytesFreqs);
            List<int> frameDiffs;

            var framesChanges = CalculateFrameChanges();
            compressedFrames = GetCompressedFrames(tree, reducedLines, framesChanges, out frameDiffs);

            bytesFreqs = GetBytesFreqs(reducedLines, HuffmanRleRepeatedBits, compressedFrames);
            tree = new HuffmanTree(bytesFreqs);
            compressedFrames = GetCompressedFrames(tree, reducedLines, framesChanges, out frameDiffs);

            var result = new byte[1000000];

            int bitPos = 0;
            Utils.AddInt(result, ref bitPos, bytesFreqs.Length, 8);
            foreach (var byteCount in bytesFreqs)
            {
                Utils.AddInt(result, ref bitPos, byteCount.Byte, 8);
                Utils.AddInt(result, ref bitPos, byteCount.Count, 24);
            }

            Utils.AddInt(result, ref bitPos, frameDiffs.Count, 24);
            foreach (var diff in frameDiffs)
                Utils.AddInt(result, ref bitPos, diff, 9);

            foreach (var frame in compressedFrames)
                Utils.AddBytes(result, ref bitPos, frame.CompressedBytes);

            result = result.Take((bitPos + 7) / 8).ToArray();

            return Convert.ToBase64String(result);
        }

Usage Example

        public void CompDecomp_v_1_3()
        {
            var generator = new AsciimationDataGenerator(File.ReadAllText(Path.Combine(QuineTests.PatternsFolder, "Asciimation.txt")));

            List<CompressedFrame> compressedFrames;
            var str = generator.Compress_v_1_3(out compressedFrames);
            File.WriteAllText("CompDecomp_v_1_3.txt", str);

            for (int i = 0; i < generator.Frames.Length; i++)
            {
                var expectedStr = "\r\n\r\n" + string.Join("\r\n", generator.Frames[i].Lines.Select(l => "//  " + l)) + "\r\n";
                var acturalStr = AsciimationDataGenerator.Decompress_v_1_3(str, i);
                Assert.AreEqual(expectedStr, acturalStr);
            }
        }
All Usage Examples Of FreakySources.Code.AsciimationDataGenerator::Compress_v_1_3