mirror of
https://github.com/UglyToad/PdfPig.git
synced 2025-07-16 22:25:07 +08:00
Spanify PngBuilder
This commit is contained in:
parent
435da86a25
commit
775d1343ae
@ -1,5 +1,6 @@
|
|||||||
namespace UglyToad.PdfPig.IO
|
namespace UglyToad.PdfPig.IO
|
||||||
{
|
{
|
||||||
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
|
||||||
internal class StreamWrapper : Stream
|
internal class StreamWrapper : Stream
|
||||||
@ -36,6 +37,13 @@
|
|||||||
Stream.Write(buffer, offset, 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 CanRead => Stream.CanRead;
|
||||||
|
|
||||||
public override bool CanSeek => Stream.CanSeek;
|
public override bool CanSeek => Stream.CanSeek;
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
namespace UglyToad.PdfPig.Images.Png
|
namespace UglyToad.PdfPig.Images.Png
|
||||||
{
|
{
|
||||||
|
using System;
|
||||||
|
|
||||||
internal readonly struct HeaderValidationResult
|
internal readonly struct HeaderValidationResult
|
||||||
{
|
{
|
||||||
public static readonly byte[] ExpectedHeader = {
|
public static ReadOnlySpan<byte> ExpectedHeader => [
|
||||||
137,
|
137,
|
||||||
80,
|
80,
|
||||||
78,
|
78,
|
||||||
@ -11,7 +13,7 @@
|
|||||||
10,
|
10,
|
||||||
26,
|
26,
|
||||||
10
|
10
|
||||||
};
|
];
|
||||||
|
|
||||||
public int Byte1 { get; }
|
public int Byte1 { get; }
|
||||||
|
|
||||||
|
@ -8,9 +8,9 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
internal readonly struct ImageHeader
|
internal readonly struct ImageHeader
|
||||||
{
|
{
|
||||||
internal static readonly byte[] HeaderBytes = {
|
internal static ReadOnlySpan<byte> HeaderBytes => [
|
||||||
73, 72, 68, 82
|
73, 72, 68, 82
|
||||||
};
|
];
|
||||||
|
|
||||||
private static readonly IReadOnlyDictionary<ColorType, HashSet<byte>> PermittedBitDepths = new Dictionary<ColorType, HashSet<byte>>
|
private static readonly IReadOnlyDictionary<ColorType, HashSet<byte>> PermittedBitDepths = new Dictionary<ColorType, HashSet<byte>>
|
||||||
{
|
{
|
||||||
|
@ -80,7 +80,7 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public void Save(Stream outputStream)
|
public void Save(Stream outputStream)
|
||||||
{
|
{
|
||||||
outputStream.Write(HeaderValidationResult.ExpectedHeader, 0, HeaderValidationResult.ExpectedHeader.Length);
|
outputStream.Write(HeaderValidationResult.ExpectedHeader);
|
||||||
|
|
||||||
var stream = new PngStreamWriteHelper(outputStream);
|
var stream = new PngStreamWriteHelper(outputStream);
|
||||||
|
|
||||||
@ -106,12 +106,12 @@
|
|||||||
|
|
||||||
var imageData = Compress(rawData);
|
var imageData = Compress(rawData);
|
||||||
stream.WriteChunkLength(imageData.Length);
|
stream.WriteChunkLength(imageData.Length);
|
||||||
stream.WriteChunkHeader("IDAT"u8.ToArray());
|
stream.WriteChunkHeader("IDAT"u8);
|
||||||
stream.Write(imageData, 0, imageData.Length);
|
stream.Write(imageData);
|
||||||
stream.WriteCrc();
|
stream.WriteCrc();
|
||||||
|
|
||||||
stream.WriteChunkLength(0);
|
stream.WriteChunkLength(0);
|
||||||
stream.WriteChunkHeader("IEND"u8.ToArray());
|
stream.WriteChunkHeader("IEND"u8);
|
||||||
stream.WriteCrc();
|
stream.WriteCrc();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,10 +31,10 @@
|
|||||||
|
|
||||||
public override void Flush() => inner.Flush();
|
public override void Flush() => inner.Flush();
|
||||||
|
|
||||||
public void WriteChunkHeader(byte[] header)
|
public void WriteChunkHeader(ReadOnlySpan<byte> header)
|
||||||
{
|
{
|
||||||
written.Clear();
|
written.Clear();
|
||||||
Write(header, 0, header.Length);
|
Write(header);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void WriteChunkLength(int length)
|
public void WriteChunkLength(int length)
|
||||||
@ -54,6 +54,20 @@
|
|||||||
inner.Write(buffer, offset, 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()
|
public void WriteCrc()
|
||||||
{
|
{
|
||||||
var result = (int)Crc32.Calculate(written);
|
var result = (int)Crc32.Calculate(written);
|
||||||
|
Loading…
Reference in New Issue
Block a user