Browse Source

Flush only when you need to.

pull/23/head
James Jackson-South 9 years ago
parent
commit
7ba6edccb0
  1. 7
      src/ImageSharp/Formats/Png/PngEncoderCore.cs

7
src/ImageSharp/Formats/Png/PngEncoderCore.cs

@ -591,7 +591,8 @@ namespace ImageSharp.Formats
int bytesPerScanline = this.width * this.bytesPerPixel; int bytesPerScanline = this.width * this.bytesPerPixel;
byte[] previousScanline = ArrayPool<byte>.Shared.Rent(bytesPerScanline); byte[] previousScanline = ArrayPool<byte>.Shared.Rent(bytesPerScanline);
byte[] rawScanline = ArrayPool<byte>.Shared.Rent(bytesPerScanline); byte[] rawScanline = ArrayPool<byte>.Shared.Rent(bytesPerScanline);
byte[] result = ArrayPool<byte>.Shared.Rent(bytesPerScanline + 1); int resultLength = bytesPerScanline + 1;
byte[] result = ArrayPool<byte>.Shared.Rent(resultLength);
byte[] buffer; byte[] buffer;
int bufferLength; int bufferLength;
@ -604,8 +605,7 @@ namespace ImageSharp.Formats
for (int y = 0; y < this.height; y++) for (int y = 0; y < this.height; y++)
{ {
this.EncodePixelRow(pixels, y, previousScanline, rawScanline, result, bytesPerScanline); this.EncodePixelRow(pixels, y, previousScanline, rawScanline, result, bytesPerScanline);
deflateStream.Write(result, 0, bytesPerScanline + 1); deflateStream.Write(result, 0, resultLength);
deflateStream.Flush();
// Do a bit of shuffling; // Do a bit of shuffling;
byte[] tmp = rawScanline; byte[] tmp = rawScanline;
@ -613,6 +613,7 @@ namespace ImageSharp.Formats
previousScanline = tmp; previousScanline = tmp;
} }
deflateStream.Flush();
bufferLength = (int)memoryStream.Length; bufferLength = (int)memoryStream.Length;
buffer = memoryStream.ToArray(); buffer = memoryStream.ToArray();
} }

Loading…
Cancel
Save