From 9a07ee9473c5702afffa6674c3efd5bed72f68ed Mon Sep 17 00:00:00 2001
From: Luis Alfredo Figueroa Bracamontes <92luisalfredo@protonmail.com>
Date: Thu, 20 Apr 2023 12:43:14 -0600
Subject: [PATCH] Adding QOI metadata and constants
I'm starting to need help because I don't understand the project structure
Everything I added was taken from the specification and structured similarly to PNG and BMP
---
src/ImageSharp/Formats/Qoi/QoiChannels.cs | 20 +++++++
src/ImageSharp/Formats/Qoi/QoiColorSpace.cs | 22 +++++++
src/ImageSharp/Formats/Qoi/QoiConstants.cs | 26 +++++++++
src/ImageSharp/Formats/Qoi/QoiHeader.cs | 45 ++++++++++++++
src/ImageSharp/Formats/Qoi/QoiMetadata.cs | 55 ++++++++++++++++++
.../Formats/Qoi/qoi-specification.pdf | Bin 0 -> 36221 bytes
6 files changed, 168 insertions(+)
create mode 100644 src/ImageSharp/Formats/Qoi/QoiChannels.cs
create mode 100644 src/ImageSharp/Formats/Qoi/QoiColorSpace.cs
create mode 100644 src/ImageSharp/Formats/Qoi/QoiConstants.cs
create mode 100644 src/ImageSharp/Formats/Qoi/QoiHeader.cs
create mode 100644 src/ImageSharp/Formats/Qoi/QoiMetadata.cs
create mode 100644 src/ImageSharp/Formats/Qoi/qoi-specification.pdf
diff --git a/src/ImageSharp/Formats/Qoi/QoiChannels.cs b/src/ImageSharp/Formats/Qoi/QoiChannels.cs
new file mode 100644
index 000000000..a76aeef28
--- /dev/null
+++ b/src/ImageSharp/Formats/Qoi/QoiChannels.cs
@@ -0,0 +1,20 @@
+// Copyright (c) Six Labors.
+// Licensed under the Six Labors Split License.
+
+namespace SixLabors.ImageSharp.Formats.Qoi;
+
+///
+/// Provides enumeration of available QOI color channels.
+///
+public enum QoiChannels
+{
+ ///
+ /// Each pixel is an R,G,B triple.
+ ///
+ Rgb = 3,
+
+ ///
+ /// Each pixel is an R,G,B triple, followed by an alpha sample.
+ ///
+ Rgba = 4
+}
diff --git a/src/ImageSharp/Formats/Qoi/QoiColorSpace.cs b/src/ImageSharp/Formats/Qoi/QoiColorSpace.cs
new file mode 100644
index 000000000..949e383d9
--- /dev/null
+++ b/src/ImageSharp/Formats/Qoi/QoiColorSpace.cs
@@ -0,0 +1,22 @@
+// Copyright (c) Six Labors.
+// Licensed under the Six Labors Split License.
+
+// ReSharper disable InconsistentNaming
+// ReSharper disable IdentifierTypo
+namespace SixLabors.ImageSharp.Formats.Qoi;
+
+///
+/// Enum for the different QOI color spaces.
+///
+public enum QoiColorSpace
+{
+ ///
+ /// sRGB color space with linear alpha value
+ ///
+ SRGB_WITH_LINEAR_ALPHA,
+
+ ///
+ /// All the values in the color space are linear
+ ///
+ ALL_CHANNELS_LINEAR
+}
diff --git a/src/ImageSharp/Formats/Qoi/QoiConstants.cs b/src/ImageSharp/Formats/Qoi/QoiConstants.cs
new file mode 100644
index 000000000..afad6d3bc
--- /dev/null
+++ b/src/ImageSharp/Formats/Qoi/QoiConstants.cs
@@ -0,0 +1,26 @@
+// Copyright (c) Six Labors.
+// Licensed under the Six Labors Split License.
+
+using System.Text;
+
+namespace SixLabors.ImageSharp.Formats.Qoi;
+
+internal static class QoiConstants
+{
+
+ ///
+ /// Gets the bytes that indicates the image is QOI
+ ///
+ public static ReadOnlySpan Magic => Encoding.UTF8.GetBytes("qoif");
+
+ ///
+ /// The list of mimetypes that equate to a QOI.
+ /// See
+ ///
+ public static readonly IEnumerable MimeTypes = new[] { "image/qoi", "image/x-qoi", "image/vnd.qoi" };
+
+ ///
+ /// The list of file extensions that equate to a QOI.
+ ///
+ public static readonly IEnumerable FileExtensions = new[] { "qoi" };
+}
diff --git a/src/ImageSharp/Formats/Qoi/QoiHeader.cs b/src/ImageSharp/Formats/Qoi/QoiHeader.cs
new file mode 100644
index 000000000..ec23d3b74
--- /dev/null
+++ b/src/ImageSharp/Formats/Qoi/QoiHeader.cs
@@ -0,0 +1,45 @@
+// Copyright (c) Six Labors.
+// Licensed under the Six Labors Split License.
+
+using System.Text;
+
+namespace SixLabors.ImageSharp.Formats.Qoi;
+
+///
+/// Represents the qoi header chunk.
+///
+internal readonly struct QoiHeader
+{
+ public QoiHeader(uint width, uint height, QoiChannels channels, QoiColorSpace colorSpace)
+ {
+ this.Width = width;
+ this.Height = height;
+ this.Channels = channels;
+ this.ColorSpace = colorSpace;
+ }
+
+ ///
+ /// Magic bytes "qoif"
+ ///
+ public byte[] Magic { get; } = Encoding.UTF8.GetBytes("qoif");
+
+ ///
+ /// Image width in pixels (BE)
+ ///
+ public uint Width { get; }
+
+ ///
+ /// Image height in pixels (BE)
+ ///
+ public uint Height { get; }
+
+ ///
+ /// Color channels of the image. 3 = RGB, 4 = RGBA.
+ ///
+ public QoiChannels Channels { get; }
+
+ ///
+ /// Color space of the image. 0 = sRGB with linear alpha, 1 = All channels linear
+ ///
+ public QoiColorSpace ColorSpace { get; }
+}
diff --git a/src/ImageSharp/Formats/Qoi/QoiMetadata.cs b/src/ImageSharp/Formats/Qoi/QoiMetadata.cs
new file mode 100644
index 000000000..de6b0a7a6
--- /dev/null
+++ b/src/ImageSharp/Formats/Qoi/QoiMetadata.cs
@@ -0,0 +1,55 @@
+// Copyright (c) Six Labors.
+// Licensed under the Six Labors Split License.
+
+using System.Text;
+using SixLabors.ImageSharp.PixelFormats;
+
+namespace SixLabors.ImageSharp.Formats.Qoi;
+
+///
+/// Provides Qoi specific metadata information for the image.
+///
+public class QoiMetadata : IDeepCloneable
+{
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public QoiMetadata()
+ {
+ }
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The metadata to create an instance from.
+ public QoiMetadata(QoiMetadata other)
+ {
+ this.Width = other.Width;
+ this.Height = other.Height;
+ this.Channels = other.Channels;
+ this.ColorSpace = other.ColorSpace;
+ }
+
+ ///
+ /// Gets or sets image width in pixels (BE)
+ ///
+ public uint Width { get; set; }
+
+ ///
+ /// Gets or sets image height in pixels (BE)
+ ///
+ public uint Height { get; set; }
+
+ ///
+ /// Gets or sets color channels of the image. 3 = RGB, 4 = RGBA.
+ ///
+ public QoiChannels Channels { get; set; }
+
+ ///
+ /// Gets or sets color space of the image. 0 = sRGB with linear alpha, 1 = All channels linear
+ ///
+ public QoiColorSpace ColorSpace { get; set; }
+
+ ///
+ public IDeepCloneable DeepClone() => new QoiMetadata(this);
+}
diff --git a/src/ImageSharp/Formats/Qoi/qoi-specification.pdf b/src/ImageSharp/Formats/Qoi/qoi-specification.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..3ffa4bd615cdb1691e063e0251cf2130ceba5406
GIT binary patch
literal 36221
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
literal 0
HcmV?d00001