Browse Source

Less memory with sub filter encoding

pull/23/head
James Jackson-South 9 years ago
parent
commit
7e6deb22ff
  1. 4
      src/ImageSharp/Formats/Png/Filters/SubFilter.cs
  2. 2
      src/ImageSharp/Formats/Png/PngEncoderCore.cs

4
src/ImageSharp/Formats/Png/Filters/SubFilter.cs

@ -44,11 +44,9 @@ namespace ImageSharp.Formats
/// <param name="bytesPerPixel">The bytes per pixel.</param>
/// <param name="bytesPerScanline">The number of bytes per scanline</param>
/// <returns>The <see cref="T:byte[]"/></returns>
public static byte[] Encode(byte[] scanline, int bytesPerPixel, int bytesPerScanline)
public static byte[] Encode(byte[] scanline, byte[] result, int bytesPerPixel, int bytesPerScanline)
{
// Sub(x) = Raw(x) - Raw(x-bpp)
byte[] result = new byte[bytesPerScanline + 1];
fixed (byte* scan = scanline)
fixed (byte* res = result)
{

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

@ -355,7 +355,7 @@ namespace ImageSharp.Formats
Tuple<byte[], int>[] candidates = new Tuple<byte[], int>[4];
byte[] sub = SubFilter.Encode(rawScanline, this.bytesPerPixel, bytesPerScanline);
byte[] sub = SubFilter.Encode(rawScanline, result, this.bytesPerPixel, bytesPerScanline);
candidates[0] = new Tuple<byte[], int>(sub, this.CalculateTotalVariation(sub));
byte[] up = UpFilter.Encode(rawScanline, previousScanline, result, bytesPerScanline);

Loading…
Cancel
Save