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); } }
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); }
public static unsafe DecompressionHandle DecompressInit(DecompressionParameters parameters) { parameters.Initialize(); byte *pBytes = (byte *)¶meters; 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); }
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."); }