mirror of
https://github.com/UglyToad/PdfPig.git
synced 2025-04-05 20:55:01 +08:00
Spanify PngBuilder
This commit is contained in:
parent
435da86a25
commit
775d1343ae
@ -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<byte> buffer)
|
||||
{
|
||||
Stream.Write(buffer);
|
||||
}
|
||||
#endif
|
||||
|
||||
public override bool CanRead => Stream.CanRead;
|
||||
|
||||
public override bool CanSeek => Stream.CanSeek;
|
||||
|
@ -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,
|
||||
@ -11,7 +13,7 @@
|
||||
10,
|
||||
26,
|
||||
10
|
||||
};
|
||||
];
|
||||
|
||||
public int Byte1 { get; }
|
||||
|
||||
|
@ -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>>
|
||||
{
|
||||
|
@ -80,7 +80,7 @@
|
||||
/// </summary>
|
||||
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 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -31,10 +31,10 @@
|
||||
|
||||
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)
|
||||
@ -54,6 +54,20 @@
|
||||
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);
|
||||
|
Loading…
Reference in New Issue
Block a user