diff --git a/src/UglyToad.PdfPig/IO/StreamWrapper.cs b/src/UglyToad.PdfPig/IO/StreamWrapper.cs index b1b07ca4..f11b1688 100644 --- a/src/UglyToad.PdfPig/IO/StreamWrapper.cs +++ b/src/UglyToad.PdfPig/IO/StreamWrapper.cs @@ -1,5 +1,6 @@ namespace UglyToad.PdfPig.IO { + using System; using System.IO; internal class StreamWrapper : Stream @@ -36,6 +37,13 @@ Stream.Write(buffer, offset, count); } +#if NET6_0_OR_GREATER + public override void Write(ReadOnlySpan buffer) + { + Stream.Write(buffer); + } +#endif + public override bool CanRead => Stream.CanRead; public override bool CanSeek => Stream.CanSeek; diff --git a/src/UglyToad.PdfPig/Images/Png/HeaderValidationResult.cs b/src/UglyToad.PdfPig/Images/Png/HeaderValidationResult.cs index d763bcba..e4c12230 100644 --- a/src/UglyToad.PdfPig/Images/Png/HeaderValidationResult.cs +++ b/src/UglyToad.PdfPig/Images/Png/HeaderValidationResult.cs @@ -1,8 +1,10 @@ namespace UglyToad.PdfPig.Images.Png { + using System; + internal readonly struct HeaderValidationResult { - public static readonly byte[] ExpectedHeader = { + public static ReadOnlySpan ExpectedHeader => [ 137, 80, 78, @@ -11,7 +13,7 @@ 10, 26, 10 - }; + ]; public int Byte1 { get; } diff --git a/src/UglyToad.PdfPig/Images/Png/ImageHeader.cs b/src/UglyToad.PdfPig/Images/Png/ImageHeader.cs index 98fece51..5b3856f2 100644 --- a/src/UglyToad.PdfPig/Images/Png/ImageHeader.cs +++ b/src/UglyToad.PdfPig/Images/Png/ImageHeader.cs @@ -8,9 +8,9 @@ /// internal readonly struct ImageHeader { - internal static readonly byte[] HeaderBytes = { + internal static ReadOnlySpan HeaderBytes => [ 73, 72, 68, 82 - }; + ]; private static readonly IReadOnlyDictionary> PermittedBitDepths = new Dictionary> { diff --git a/src/UglyToad.PdfPig/Images/Png/PngBuilder.cs b/src/UglyToad.PdfPig/Images/Png/PngBuilder.cs index 7350d687..14e6266c 100644 --- a/src/UglyToad.PdfPig/Images/Png/PngBuilder.cs +++ b/src/UglyToad.PdfPig/Images/Png/PngBuilder.cs @@ -80,7 +80,7 @@ /// public void Save(Stream outputStream) { - outputStream.Write(HeaderValidationResult.ExpectedHeader, 0, HeaderValidationResult.ExpectedHeader.Length); + outputStream.Write(HeaderValidationResult.ExpectedHeader); var stream = new PngStreamWriteHelper(outputStream); @@ -106,12 +106,12 @@ 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(); } @@ -156,4 +156,4 @@ } } } -} +} \ No newline at end of file diff --git a/src/UglyToad.PdfPig/Images/Png/PngStreamWriteHelper.cs b/src/UglyToad.PdfPig/Images/Png/PngStreamWriteHelper.cs index 98d2a297..f09c52a1 100644 --- a/src/UglyToad.PdfPig/Images/Png/PngStreamWriteHelper.cs +++ b/src/UglyToad.PdfPig/Images/Png/PngStreamWriteHelper.cs @@ -31,10 +31,10 @@ public override void Flush() => inner.Flush(); - public void WriteChunkHeader(byte[] header) + public void WriteChunkHeader(ReadOnlySpan header) { written.Clear(); - Write(header, 0, header.Length); + Write(header); } public void WriteChunkLength(int length) @@ -54,6 +54,20 @@ inner.Write(buffer, offset, count); } +#if NET8_0_OR_GREATER + public override void Write(ReadOnlySpan buffer) + { + written.AddRange(buffer); + inner.Write(buffer); + } +#else + public void Write(ReadOnlySpan buffer) + { + written.AddRange(buffer.ToArray()); + inner.Write(buffer); + } +#endif + public void WriteCrc() { var result = (int)Crc32.Calculate(written);