Ejemplo n.º 1
0
        public bool ReadHeader()
        {
            this._Codec?.Dispose();
            this._DecompressionParameters?.Dispose();
            this._Image?.Dispose();

            this._Codec = null;
            this._DecompressionParameters = null;
            this._Image = null;

            // ToDo: Support to change format?
            this._Codec = OpenJpeg.CreateDecompress(CodecFormat.J2k);
            //this._Codec = OpenJpeg.CreateDecompress(CodecFormat.Jp2);
            this._DecompressionParameters = new DecompressionParameters();
            OpenJpeg.SetDefaultDecoderParameters(this._DecompressionParameters);

            if (!OpenJpeg.SetupDecoder(this._Codec, this._DecompressionParameters))
            {
                return(false);
            }

            if (!OpenJpeg.ReadHeader(this._Stream, this._Codec, out var image))
            {
                return(false);
            }

            this.Width  = (int)(image.X1 - image.X0);
            this.Height = (int)(image.Y1 - image.Y0);
            this._Image = image;

            return(true);
        }
        public void Decode()
        {
            var targets = new[]
            {
                //new { Name = "Bretagne1_0.j2k", IsReadStream = true, Format = CodecFormat.Unknown,  Result = false },
                new { Name = "Bretagne1_0.j2k", IsReadStream = true, Format = CodecFormat.J2k, Result = true },
                //new { Name = "Bretagne1_0.j2k", IsReadStream = true, Format = CodecFormat.Jp2,      Result = false  },
                //new { Name = "Bretagne1_0.j2k", IsReadStream = true, Format = CodecFormat.Jpp,      Result = false },
                //new { Name = "Bretagne1_0.j2k", IsReadStream = true, Format = CodecFormat.Jpt,      Result = false },
                //new { Name = "Bretagne1_0.j2k", IsReadStream = true, Format = CodecFormat.Jpx,      Result = false }
            };

            foreach (var target in targets)
            {
                var path = Path.GetFullPath(Path.Combine(TestImageDirectory, target.Name));

                var stream = OpenJpeg.StreamCreateDefaultFileStream(path, target.IsReadStream);
                var codec  = OpenJpeg.CreateDecompress(target.Format);
                var decompressionParameters = new DecompressionParameters();
                OpenJpeg.SetDefaultDecoderParameters(decompressionParameters);
                Assert.True(OpenJpeg.SetupDecoder(codec, decompressionParameters) == target.Result, $"Failed to invoke {nameof(OpenJpeg.SetupDecoder)} for {target.Format} and {target.IsReadStream}");
                Assert.True(OpenJpeg.ReadHeader(stream, codec, out var image) == target.Result, $"Failed to invoke {nameof(OpenJpeg.ReadHeader)} for {target.Format} and {target.IsReadStream}");
                Assert.True(OpenJpeg.SetDecodeArea(codec, image, 0, 0, 0, 0) == target.Result, $"Failed to invoke {nameof(OpenJpeg.SetDecodeArea)} for {target.Format} and {target.IsReadStream}");
                Assert.True(OpenJpeg.Decode(codec, stream, image) == target.Result, $"Failed to invoke {nameof(OpenJpeg.Decode)} for {target.Format} and {target.IsReadStream}");
                Assert.True(OpenJpeg.EndDecompress(codec, stream) == target.Result, $"Failed to invoke {nameof(OpenJpeg.EndDecompress)} for {target.Format} and {target.IsReadStream}");

                this.DisposeAndCheckDisposedState(image);
                this.DisposeAndCheckDisposedState(stream);
                this.DisposeAndCheckDisposedState(decompressionParameters);
                this.DisposeAndCheckDisposedState(codec);
            }
        }
Ejemplo n.º 3
0
        public static byte[] DecompressMemory(byte[] compressedBytes, ulong uncompressedSize)
        {
            UIntPtr compressedLength = new UIntPtr((uint)compressedBytes.Length);

            byte[]  decompressedBytes  = new byte[uncompressedSize];
            UIntPtr decompressedLength = new UIntPtr(uncompressedSize);

            uint adler32 = 0;

            var parameters = new DecompressionParameters {
                DictionarySize = ApexDictSize, Flags = DecompressionFlags.OutputUnbuffered
            };

            parameters.Initialize();

            var result = LzhamWrapper.Lzham.DecompressMemory(parameters, compressedBytes, ref compressedLength, 0, decompressedBytes, ref decompressedLength, 0, ref adler32);

            if (result != DecompressStatus.Success)
            {
                throw new Exception("Lzham.DecompressMemory failed. Status: " + result.ToString());
            }
            if (decompressedLength.ToUInt64() != uncompressedSize)
            {
                throw new Exception($"Data length mismatch: {decompressedLength} vs {uncompressedSize}");
            }

            return(decompressedBytes);
        }
Ejemplo n.º 4
0
        public static unsafe DecompressionHandle DecompressInit(DecompressionParameters parameters)
        {
            parameters.Initialize();
            byte *pBytes = (byte *)&parameters;

            return(lzham_decompress_init(pBytes));
        }
 public void DecompressionParametersDecodingFormat()
 {
     using var parameter = new DecompressionParameters();
     foreach (var value in new[] { 0, 1, 10 })
     {
         parameter.DecodingFormat = value;
         Assert.Equal(value, parameter.DecodingFormat);
     }
 }
 public void DecompressionParametersDecodingAreaY1()
 {
     using var parameter = new DecompressionParameters();
     foreach (var value in new[] { 0u, 1u, 10u })
     {
         parameter.DecodingAreaY1 = value;
         Assert.Equal(value, parameter.DecodingAreaY1);
     }
 }
 public void DecompressionParametersCodingParameterReduce()
 {
     using var parameter = new DecompressionParameters();
     foreach (var value in new[] { 0u, 1u, 10u })
     {
         parameter.CodingParameterReduce = value;
         Assert.Equal(value, parameter.CodingParameterReduce);
     }
 }
 public void DecompressionParametersVerboseMode()
 {
     using var parameter = new DecompressionParameters();
     foreach (var value in new[] { true, false })
     {
         parameter.VerboseMode = value;
         Assert.Equal(value, parameter.VerboseMode);
     }
 }
 public void DecompressionParametersTileIndex()
 {
     using var parameter = new DecompressionParameters();
     foreach (var value in new[] { 0u, 1u, 10u })
     {
         parameter.TileIndex = value;
         Assert.Equal(value, parameter.TileIndex);
     }
 }
 public void DecompressionParametersNumberBlockTileToDecide()
 {
     using var parameter = new DecompressionParameters();
     foreach (var value in new[] { 0u, 1u, 10u })
     {
         parameter.NumberBlockTileToDecide = value;
         Assert.Equal(value, parameter.NumberBlockTileToDecide);
     }
 }
 public void DecompressionParametersJpwlMaxTiles()
 {
     using var parameter = new DecompressionParameters();
     foreach (var value in new[] { 0, 1, 10 })
     {
         parameter.JpwlMaxTiles = value;
         Assert.Equal(value, parameter.JpwlMaxTiles);
     }
 }
 public void DecompressionParametersJpwlExpectedComponents()
 {
     using var parameter = new DecompressionParameters();
     foreach (var value in new[] { 0, 1, 10 })
     {
         parameter.JpwlExpectedComponents = value;
         Assert.Equal(value, parameter.JpwlExpectedComponents);
     }
 }
 public void DecompressionParametersJpwlCorrect()
 {
     using var parameter = new DecompressionParameters();
     foreach (var value in new[] { true, false })
     {
         parameter.JpwlCorrect = value;
         Assert.Equal(value, parameter.JpwlCorrect);
     }
 }
 public void DecompressionParametersFlags()
 {
     using var parameter = new DecompressionParameters();
     foreach (var value in new[] { 0u, 1u, 10u })
     {
         parameter.Flags = value;
         Assert.Equal(value, parameter.Flags);
     }
 }
 private static Image DecodeImageFromFile(string path, CodecFormat format)
 {
     using var stream = OpenJpeg.StreamCreateDefaultFileStream(path, true);
     using var codec  = OpenJpeg.CreateDecompress(format);
     using var decompressionParameters = new DecompressionParameters();
     OpenJpeg.SetDefaultDecoderParameters(decompressionParameters);
     OpenJpeg.SetupDecoder(codec, decompressionParameters);
     OpenJpeg.ReadHeader(stream, codec, out var image);
     OpenJpeg.SetDecodeArea(codec, image, 0, 0, 0, 0);
     OpenJpeg.Decode(codec, stream, image);
     OpenJpeg.EndDecompress(codec, stream);
     return(image);
 }
Ejemplo n.º 16
0
 public static unsafe DecompressStatus DecompressMemory(DecompressionParameters parameters, byte[] inBuf, ref UIntPtr inBufSize, int inBufOffset, byte[] outBuf, ref UIntPtr outBufSize, int outBufOffset, ref uint adler32)
 {
     if (inBufOffset + inBufSize.ToUInt32() > inBuf.Length)
         throw new ArgumentOutOfRangeException(nameof(inBuf), "Offset + Size is larger than the length of the array."); }