From 4fcc5c6c57f46ed295e7cbd422c535549d2ec03c Mon Sep 17 00:00:00 2001 From: Jason Nelson Date: Mon, 1 Apr 2024 19:01:32 -0700 Subject: [PATCH] Eliminate a few allocations in ColorSpace transformers --- .../Graphics/Colors/ColorSpaceDetails.cs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/UglyToad.PdfPig/Graphics/Colors/ColorSpaceDetails.cs b/src/UglyToad.PdfPig/Graphics/Colors/ColorSpaceDetails.cs index 558cd3367..1a1f94412 100644 --- a/src/UglyToad.PdfPig/Graphics/Colors/ColorSpaceDetails.cs +++ b/src/UglyToad.PdfPig/Graphics/Colors/ColorSpaceDetails.cs @@ -4,6 +4,7 @@ using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; + using System.Runtime.InteropServices; using Tokens; using UglyToad.PdfPig.Content; using UglyToad.PdfPig.Functions; @@ -572,7 +573,12 @@ internal override ReadOnlySpan Transform(ReadOnlySpan decoded) transformed.Add(ConvertToByte(colors[c])); } } + +#if NET8_0_OR_GREATER + return CollectionsMarshal.AsSpan(transformed); +#else return transformed.ToArray(); +#endif } /// @@ -721,7 +727,7 @@ public override IColor GetColor(params double[] values) internal override ReadOnlySpan Transform(ReadOnlySpan values) { var cache = new Dictionary(); - var transformed = new List(); + var transformed = new List(values.Length * 3); for (var i = 0; i < values.Length; i += 3) { byte b = values[i++]; @@ -737,7 +743,11 @@ internal override ReadOnlySpan Transform(ReadOnlySpan values) } } +#if NET8_0_OR_GREATER + return CollectionsMarshal.AsSpan(transformed); +#else return transformed.ToArray(); +#endif } ///