Skip to content

Commit

Permalink
Spanify PngBuilder
Browse files Browse the repository at this point in the history
  • Loading branch information
iamcarbon authored and BobLd committed Apr 12, 2024
1 parent 435da86 commit 775d134
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 11 deletions.
8 changes: 8 additions & 0 deletions src/UglyToad.PdfPig/IO/StreamWrapper.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
namespace UglyToad.PdfPig.IO
{
using System;
using System.IO;

internal class StreamWrapper : Stream
Expand Down Expand Up @@ -36,6 +37,13 @@ public override void Write(byte[] buffer, int offset, int count)
Stream.Write(buffer, offset, count);
}

#if NET6_0_OR_GREATER
public override void Write(ReadOnlySpan<byte> buffer)
{
Stream.Write(buffer);
}
#endif

public override bool CanRead => Stream.CanRead;

public override bool CanSeek => Stream.CanSeek;
Expand Down
6 changes: 4 additions & 2 deletions src/UglyToad.PdfPig/Images/Png/HeaderValidationResult.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
namespace UglyToad.PdfPig.Images.Png
{
using System;

internal readonly struct HeaderValidationResult
{
public static readonly byte[] ExpectedHeader = {
public static ReadOnlySpan<byte> ExpectedHeader => [
137,
80,
78,
Expand All @@ -11,7 +13,7 @@ internal readonly struct HeaderValidationResult
10,
26,
10
};
];

public int Byte1 { get; }

Expand Down
4 changes: 2 additions & 2 deletions src/UglyToad.PdfPig/Images/Png/ImageHeader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
/// </summary>
internal readonly struct ImageHeader
{
internal static readonly byte[] HeaderBytes = {
internal static ReadOnlySpan<byte> HeaderBytes => [
73, 72, 68, 82
};
];

private static readonly IReadOnlyDictionary<ColorType, HashSet<byte>> PermittedBitDepths = new Dictionary<ColorType, HashSet<byte>>
{
Expand Down
10 changes: 5 additions & 5 deletions src/UglyToad.PdfPig/Images/Png/PngBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ public byte[] Save()
/// </summary>
public void Save(Stream outputStream)
{
outputStream.Write(HeaderValidationResult.ExpectedHeader, 0, HeaderValidationResult.ExpectedHeader.Length);
outputStream.Write(HeaderValidationResult.ExpectedHeader);

var stream = new PngStreamWriteHelper(outputStream);

Expand All @@ -106,12 +106,12 @@ public void Save(Stream outputStream)

var imageData = Compress(rawData);
stream.WriteChunkLength(imageData.Length);
stream.WriteChunkHeader("IDAT"u8.ToArray());
stream.Write(imageData, 0, imageData.Length);
stream.WriteChunkHeader("IDAT"u8);
stream.Write(imageData);
stream.WriteCrc();

stream.WriteChunkLength(0);
stream.WriteChunkHeader("IEND"u8.ToArray());
stream.WriteChunkHeader("IEND"u8);
stream.WriteCrc();
}

Expand Down Expand Up @@ -156,4 +156,4 @@ private static byte[] Compress(byte[] data)
}
}
}
}
}
18 changes: 16 additions & 2 deletions src/UglyToad.PdfPig/Images/Png/PngStreamWriteHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,10 @@ public PngStreamWriteHelper(Stream inner)

public override void Flush() => inner.Flush();

public void WriteChunkHeader(byte[] header)
public void WriteChunkHeader(ReadOnlySpan<byte> header)
{
written.Clear();
Write(header, 0, header.Length);
Write(header);
}

public void WriteChunkLength(int length)
Expand All @@ -54,6 +54,20 @@ public override void Write(byte[] buffer, int offset, int count)
inner.Write(buffer, offset, count);
}

#if NET8_0_OR_GREATER
public override void Write(ReadOnlySpan<byte> buffer)
{
written.AddRange(buffer);
inner.Write(buffer);
}
#else
public void Write(ReadOnlySpan<byte> buffer)
{
written.AddRange(buffer.ToArray());
inner.Write(buffer);
}
#endif

public void WriteCrc()
{
var result = (int)Crc32.Calculate(written);
Expand Down

0 comments on commit 775d134

Please sign in to comment.