diff --git a/src/ImageSharp/Formats/Exr/Compression/Compressors/ZipExrCompressor.cs b/src/ImageSharp/Formats/Exr/Compression/Compressors/ZipExrCompressor.cs index 8a7b784601..587ecb7562 100644 --- a/src/ImageSharp/Formats/Exr/Compression/Compressors/ZipExrCompressor.cs +++ b/src/ImageSharp/Formats/Exr/Compression/Compressors/ZipExrCompressor.cs @@ -11,7 +11,7 @@ internal class ZipExrCompressor : ExrBaseCompressor { private readonly DeflateCompressionLevel compressionLevel; - private MemoryStream memoryStream = new(); + private readonly MemoryStream memoryStream = new(); private readonly System.Buffers.IMemoryOwner buffer; @@ -60,12 +60,17 @@ internal class ZipExrCompressor : ExrBaseCompressor byte[] buffer = this.memoryStream.GetBuffer(); this.Output.Write(buffer, 0, size); - this.memoryStream = new(); + // Reset memory stream for next pixel row. + this.memoryStream.Seek(0, SeekOrigin.Begin); + this.memoryStream.SetLength(0); + return (uint)size; } /// protected override void Dispose(bool disposing) { + this.buffer.Dispose(); + this.memoryStream?.Dispose(); } } diff --git a/src/ImageSharp/Formats/Exr/Compression/Decompressors/ZipExrCompression.cs b/src/ImageSharp/Formats/Exr/Compression/Decompressors/ZipExrCompression.cs index 5424634523..b8dc5efa8e 100644 --- a/src/ImageSharp/Formats/Exr/Compression/Decompressors/ZipExrCompression.cs +++ b/src/ImageSharp/Formats/Exr/Compression/Decompressors/ZipExrCompression.cs @@ -30,7 +30,7 @@ internal class ZipExrCompression : ExrBaseDecompressor return left > 0 ? left : 0; }); inflateStream.AllocateNewBytes((int)this.BytesPerBlock, true); - DeflateStream dataStream = inflateStream.CompressedStream!; + using DeflateStream dataStream = inflateStream.CompressedStream!; int totalRead = 0; while (totalRead < buffer.Length)