コード例 #1
0
ファイル: Main.cs プロジェクト: calvarado194/layton-rando
        public static FormatCompress Get_Format(string input)
        {
            CompressionFormat fmt = null;

            foreach (FormatCompress f in Enum.GetValues(typeof(FormatCompress)))
            {
                switch (f)
                {
                //case FormatCompress.LZOVL: fmt = new LZOvl(); break;
                case FormatCompress.LZ10: fmt = new LZ10(); break;

                case FormatCompress.LZ11: fmt = new LZ11(); break;

                case FormatCompress.RLE: fmt = new RLE(); break;

                case FormatCompress.HUFF: fmt = new Huffman(); break;
                }

                if (fmt == null)
                {
                    continue;
                }

                if (fmt.Supports(input))
                {
                    return(f);
                }
            }

            return(FormatCompress.Invalid);
        }
コード例 #2
0
ファイル: LZTests.cs プロジェクト: wabberz/Kuriimu
        static void Test(byte[] bytes, Method method)
        {
            byte[] bytes2 = new byte[bytes.Length];

            switch (method)
            {
            case Method.LZ10:
                bytes2 = LZ10.Decompress(new MemoryStream(LZ10.Compress(new MemoryStream(bytes))), bytes.Length);
                Assert.IsTrue(bytes.SequenceEqual(bytes2));
                break;

            case Method.LZ11:
                bytes2 = LZ11.Decompress(new MemoryStream(LZ11.Compress(new MemoryStream(bytes))), bytes.Length);
                Assert.IsTrue(bytes.SequenceEqual(bytes2));
                break;

            case Method.LZ40:
                bytes2 = LZ40.Decompress(new MemoryStream(LZ40.Compress(new MemoryStream(bytes))), bytes.Length);
                Assert.IsTrue(bytes.SequenceEqual(bytes2));
                break;

            case Method.LZ77:
                bytes2 = LZ77.Decompress(new MemoryStream(LZ77.Compress(new MemoryStream(bytes))));
                Assert.IsTrue(bytes.SequenceEqual(bytes2));
                break;

            case Method.RevLZ77:
                bytes2 = RevLZ77.Decompress(new MemoryStream(RevLZ77.Compress(new MemoryStream(bytes))));
                Assert.IsTrue(bytes.SequenceEqual(bytes2));
                break;

            case Method.LZ4:
                bytes2 = LZ4.Decompress(new MemoryStream(LZ4.Compress(new MemoryStream(bytes))));
                Assert.IsTrue(bytes.SequenceEqual(bytes2));
                break;

            case Method.LZECD:
                bytes2 = LZECD.Decompress(new MemoryStream(LZECD.Compress(new MemoryStream(bytes))));
                Assert.IsTrue(bytes.SequenceEqual(bytes2));
                break;

            case Method.LZOvl:
                bytes2 = LZOvl.Decompress(new MemoryStream(LZOvl.Compress(new MemoryStream(bytes))));
                Assert.IsTrue(bytes.SequenceEqual(bytes2));
                break;

            case Method.MIO0:
                bytes2 = MIO0.Decompress(new MemoryStream(MIO0.Compress(new MemoryStream(bytes), ByteOrder.LittleEndian)), ByteOrder.LittleEndian);
                Assert.IsTrue(bytes.SequenceEqual(bytes2));
                break;
            }
        }
コード例 #3
0
ファイル: Main.cs プロジェクト: calvarado194/layton-rando
        public static int DoCompress(string infile, MemoryStream output, FormatCompress format, out FormatCompress actualFormat)
        {
            CompressionFormat fmt = null;

            switch (format)
            {
            case FormatCompress.LZ10: fmt = new LZ10(); break;

            case FormatCompress.LZ11: fmt = new LZ11(); break;

            case FormatCompress.LZOVL: fmt = new LZOvl(); break;

            case FormatCompress.RLE: fmt = new RLE(); break;

            case FormatCompress.HUFF4: Huffman.CompressBlockSize = Huffman.BlockSize.FOURBIT; fmt = new Huffman(); break;

            case FormatCompress.HUFF8: Huffman.CompressBlockSize = Huffman.BlockSize.EIGHTBIT; fmt = new Huffman(); break;

            case FormatCompress.HUFF:
                return(CompressHuff(infile, output, out actualFormat));

            case FormatCompress.GBA:
                return(CompressGBA(infile, output, out actualFormat));

            case FormatCompress.NDS:
                return(CompressNDS(infile, output, out actualFormat));

            default:
                actualFormat = FormatCompress.Invalid;
                return(-1);
            }
            actualFormat = format;

            using (FileStream inStream = File.OpenRead(infile))
            {
                try
                {
                    return(fmt.Compress(inStream, inStream.Length, output));
                }
                catch (Exception s)
                {
                    // any exception generated by compression is a fatal exception
                    Console.WriteLine(s.Message);
                    return(-1);
                }
            }
        }
コード例 #4
0
        private static int DoCompress(string infile, MemoryStream output, Formats format, out Formats actualFormat)
        {
            CompressionFormat fmt = null;

            switch (format)
            {
            case Formats.LZ10: fmt = new LZ10(); break;

            case Formats.LZ11: fmt = new LZ11(); break;

            case Formats.LZOVL: fmt = new LZOvl(); break;

            case Formats.RLE: fmt = new RLE(); break;

            case Formats.HUFF4: fmt = new Huffman4(); break;

            case Formats.HUFF8: fmt = new Huffman8(); break;

            case Formats.HUFF:
                return(CompressHuff(infile, output, out actualFormat));

            case Formats.GBA:
                return(CompressGBA(infile, output, out actualFormat));

            case Formats.NDS:
                return(CompressNDS(infile, output, out actualFormat));

            default:
                throw new Exception("Unhandled compression format " + format);
            }
            actualFormat = format;

            using (FileStream inStream = File.OpenRead(infile))
            {
                try
                {
                    return(fmt.Compress(inStream, inStream.Length, output));
                }
                catch (Exception s)
                {
                    // any exception generated by compression is a fatal exception
                    Console.WriteLine(s.Message);
                    return(-1);
                }
            }
        }
コード例 #5
0
ファイル: Main.cs プロジェクト: calvarado194/layton-rando
        private static long Decompress(MemoryStream inputStream, MemoryStream output, FormatCompress format)
        {
            CompressionFormat realFormat = null;

            switch (format)
            {
            case FormatCompress.HUFF:
                realFormat = new Huffman(); break;

            case FormatCompress.LZ10:
                realFormat = new LZ10(); break;

            case FormatCompress.LZ11:
                realFormat = new LZ11(); break;

            case FormatCompress.LZOVL:
                realFormat = new LZOvl(); break;

            case FormatCompress.RLE:
                realFormat = new RLE(); break;

            default:
                return(-1);
            }
            if (!realFormat.Supports(inputStream, inputStream.Length))
            {
                return(-1);
            }
            try
            {
                return(realFormat.Decompress(inputStream, inputStream.Length, output));
            }
            catch (TooMuchInputException e)
            {
                Console.WriteLine(e.Message);
                return(output.Length);
            }
            catch (Exception e)
            {
                Console.WriteLine(String.Format(Main.Get_Traduction("S1D"), format.ToString(), e.Message));
                return(-1);
            }
        }
コード例 #6
0
ファイル: Main.cs プロジェクト: calvarado194/layton-rando
        public static FormatCompress Get_Format(FileStream input, bool arm9)
        {
            CompressionFormat fmt = null;

            foreach (FormatCompress f in Enum.GetValues(typeof(FormatCompress)))
            {
                switch (f)
                {
                //case FormatCompress.LZOVL: fmt = new LZOvl(); break;
                case FormatCompress.LZ10: fmt = new LZ10(); break;

                case FormatCompress.LZ11: fmt = new LZ11(); break;

                case FormatCompress.RLE: fmt = new RLE(); break;

                case FormatCompress.HUFF: fmt = new Huffman(); break;
                }

                if (fmt == null)
                {
                    continue;
                }

                long fLength = input.Length;
                if (arm9)
                {
                    fLength -= 0xC;
                }

                if (fmt.Supports(input, fLength))
                {
                    return(f);
                }
            }

            return(FormatCompress.Invalid);
        }
コード例 #7
0
ファイル: Compression.cs プロジェクト: benladen/Kuriimu
        public static void Compress(object sender, EventArgs e)
        {
            var tsi = sender as ToolStripMenuItem;

            if (!PrepareFiles("Open a decompressed " + tsi.Tag.ToString() + "file...", "Save your compressed file...", ".comp", out FileStream openFile, out FileStream saveFile))
            {
                return;
            }

            try
            {
                using (openFile)
                    using (var outFs = new BinaryWriterX(saveFile))
                        switch (tsi.Tag)
                        {
                        /*case Compression.L5LZSS:
                         *  outFs.Write(Level5.Compress(openFile, 1));
                         *  break;
                         * case Compression.L5Huff4:
                         *  outFs.Write(Level5.Compress(openFile, 2));
                         *  break;
                         * case Compression.L5Huff8:
                         *  outFs.Write(Level5.Compress(openFile, 3));
                         *  break;
                         * case Compression.L5RLE:
                         *  outFs.Write(Level5.Compress(openFile, 4));
                         *  break;*/
                        case Compression.GZip:
                            outFs.Write(GZip.Compress(openFile));
                            break;

                        case Compression.Huff4:
                            outFs.Write(Huffman.Compress(openFile, 4));
                            break;

                        case Compression.Huff8:
                            outFs.Write(Huffman.Compress(openFile, 8));
                            break;

                        case Compression.LZ10:
                            outFs.Write(LZ10.Compress(openFile));
                            break;

                        case Compression.LZ11:
                            outFs.Write(LZ11.Compress(openFile));
                            break;

                        /*case Compression.LZSS:
                         *  outFs.Write(LZSS.Compress(openFile));
                         *  break;*/
                        case Compression.RevLZ77:
                            outFs.Write(RevLZ77.Compress(openFile));
                            break;

                        case Compression.RLE:
                            outFs.Write(RLE.Compress(openFile));
                            break;

                        case Compression.ZLib:
                            outFs.Write(ZLib.Compress(openFile));
                            break;
                        }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), tsi?.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            MessageBox.Show($"Successfully compressed {Path.GetFileName(openFile.Name)}.", tsi?.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
コード例 #8
0
        private static int CompressBest(string infile, MemoryStream output, out Formats actualFormat, params Formats[] formats)
        {
            // only read the input data once from the file.
            byte[] inputData;
            using (FileStream inStream = File.OpenRead(infile))
            {
                inputData = new byte[inStream.Length];
                inStream.Read(inputData, 0, inputData.Length);
            }

            MemoryStream bestOutput  = null;
            int          minCompSize = int.MaxValue;

            actualFormat = Formats.GBA;
            foreach (Formats format in formats)
            {
                #region compress the file in each format, and save the best one

                MemoryStream      currentOutput = new MemoryStream();
                CompressionFormat realFormat    = null;
                switch (format)
                {
                case Formats.HUFF4: realFormat = new Huffman4(); break;

                case Formats.HUFF8: realFormat = new Huffman8(); break;

                case Formats.LZ10: realFormat = new LZ10(); break;

                case Formats.LZ11: realFormat = new LZ11(); break;

                case Formats.LZOVL: realFormat = new LZOvl(); break;

                case Formats.RLE: realFormat = new RLE(); break;

                default:
                    Console.WriteLine("Unsupported single format: " + format);
                    continue;
                }

                int currentOutSize;
                try
                {
                    using (MemoryStream inStream = new MemoryStream(inputData))
                    {
                        currentOutSize = realFormat.Compress(inStream, inStream.Length, currentOutput);
                    }
                }
                catch (InputTooLargeException i)
                {
                    Console.WriteLine(i.Message);
                    actualFormat = format;
                    return(-1);
                }
                catch (Exception)
                {
                    continue;
                }
                if (currentOutSize < minCompSize)
                {
                    bestOutput   = currentOutput;
                    minCompSize  = currentOutSize;
                    actualFormat = format;
                }

                #endregion
            }

            if (bestOutput == null)
            {
                Console.WriteLine("The file could not be compressed in any format.");
                return(-1);
            }
            bestOutput.WriteTo(output);
            return(minCompSize);
        }
コード例 #9
0
ファイル: Main.cs プロジェクト: calvarado194/layton-rando
        private static int CompressBest(string infile, MemoryStream output, out FormatCompress actualFormat, params FormatCompress[] formats)
        {
            // only read the input data once from the file.
            byte[] inputData;
            using (FileStream inStream = File.OpenRead(infile))
            {
                inputData = new byte[inStream.Length];
                inStream.Read(inputData, 0, inputData.Length);
            }

            MemoryStream bestOutput  = null;
            int          minCompSize = int.MaxValue;

            actualFormat = FormatCompress.GBA;
            foreach (FormatCompress format in formats)
            {
                #region compress the file in each format, and save the best one

                MemoryStream      currentOutput = new MemoryStream();
                CompressionFormat realFormat    = null;
                switch (format)
                {
                case FormatCompress.HUFF4: Huffman.CompressBlockSize = Huffman.BlockSize.FOURBIT; realFormat = new Huffman(); break;

                case FormatCompress.HUFF8: Huffman.CompressBlockSize = Huffman.BlockSize.EIGHTBIT; realFormat = new Huffman(); break;

                case FormatCompress.LZ10: realFormat = new LZ10(); break;

                case FormatCompress.LZ11: realFormat = new LZ11(); break;

                case FormatCompress.LZOVL: realFormat = new LZOvl(); break;

                case FormatCompress.RLE: realFormat = new RLE(); break;
                }

                int currentOutSize;
                try
                {
                    using (MemoryStream inStream = new MemoryStream(inputData))
                    {
                        currentOutSize = realFormat.Compress(inStream, inStream.Length, currentOutput);
                    }
                }
                catch (InputTooLargeException i)
                {
                    Console.WriteLine(i.Message);
                    actualFormat = format;
                    return(-1);
                }
                catch (Exception)
                {
                    continue;
                }
                if (currentOutSize < minCompSize)
                {
                    bestOutput   = currentOutput;
                    minCompSize  = currentOutSize;
                    actualFormat = format;
                }

                #endregion
            }

            if (bestOutput == null)
            {
                Console.WriteLine(Main.Get_Traduction("S1A"));
                return(-1);
            }
            bestOutput.WriteTo(output);
            return(minCompSize);
        }