mirror of https://github.com/SixLabors/ImageSharp
Browse Source
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 BMPqoi
6 changed files with 168 additions and 0 deletions
@ -0,0 +1,20 @@ |
|||||
|
// Copyright (c) Six Labors.
|
||||
|
// Licensed under the Six Labors Split License.
|
||||
|
|
||||
|
namespace SixLabors.ImageSharp.Formats.Qoi; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Provides enumeration of available QOI color channels.
|
||||
|
/// </summary>
|
||||
|
public enum QoiChannels |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// Each pixel is an R,G,B triple.
|
||||
|
/// </summary>
|
||||
|
Rgb = 3, |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Each pixel is an R,G,B triple, followed by an alpha sample.
|
||||
|
/// </summary>
|
||||
|
Rgba = 4 |
||||
|
} |
||||
@ -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; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Enum for the different QOI color spaces.
|
||||
|
/// </summary>
|
||||
|
public enum QoiColorSpace |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// sRGB color space with linear alpha value
|
||||
|
/// </summary>
|
||||
|
SRGB_WITH_LINEAR_ALPHA, |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// All the values in the color space are linear
|
||||
|
/// </summary>
|
||||
|
ALL_CHANNELS_LINEAR |
||||
|
} |
||||
@ -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 |
||||
|
{ |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Gets the bytes that indicates the image is QOI
|
||||
|
/// </summary>
|
||||
|
public static ReadOnlySpan<byte> Magic => Encoding.UTF8.GetBytes("qoif"); |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// The list of mimetypes that equate to a QOI.
|
||||
|
/// See <seealso cref="https://github.com/phoboslab/qoi/issues/167"/>
|
||||
|
/// </summary>
|
||||
|
public static readonly IEnumerable<string> MimeTypes = new[] { "image/qoi", "image/x-qoi", "image/vnd.qoi" }; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// The list of file extensions that equate to a QOI.
|
||||
|
/// </summary>
|
||||
|
public static readonly IEnumerable<string> FileExtensions = new[] { "qoi" }; |
||||
|
} |
||||
@ -0,0 +1,45 @@ |
|||||
|
// Copyright (c) Six Labors.
|
||||
|
// Licensed under the Six Labors Split License.
|
||||
|
|
||||
|
using System.Text; |
||||
|
|
||||
|
namespace SixLabors.ImageSharp.Formats.Qoi; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Represents the qoi header chunk.
|
||||
|
/// </summary>
|
||||
|
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; |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Magic bytes "qoif"
|
||||
|
/// </summary>
|
||||
|
public byte[] Magic { get; } = Encoding.UTF8.GetBytes("qoif"); |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Image width in pixels (BE)
|
||||
|
/// </summary>
|
||||
|
public uint Width { get; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Image height in pixels (BE)
|
||||
|
/// </summary>
|
||||
|
public uint Height { get; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Color channels of the image. 3 = RGB, 4 = RGBA.
|
||||
|
/// </summary>
|
||||
|
public QoiChannels Channels { get; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Color space of the image. 0 = sRGB with linear alpha, 1 = All channels linear
|
||||
|
/// </summary>
|
||||
|
public QoiColorSpace ColorSpace { get; } |
||||
|
} |
||||
@ -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; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Provides Qoi specific metadata information for the image.
|
||||
|
/// </summary>
|
||||
|
public class QoiMetadata : IDeepCloneable |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// Initializes a new instance of the <see cref="QoiMetadata"/> class.
|
||||
|
/// </summary>
|
||||
|
public QoiMetadata() |
||||
|
{ |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Initializes a new instance of the <see cref="QoiMetadata"/> class.
|
||||
|
/// </summary>
|
||||
|
/// <param name="other">The metadata to create an instance from.</param>
|
||||
|
public QoiMetadata(QoiMetadata other) |
||||
|
{ |
||||
|
this.Width = other.Width; |
||||
|
this.Height = other.Height; |
||||
|
this.Channels = other.Channels; |
||||
|
this.ColorSpace = other.ColorSpace; |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Gets or sets image width in pixels (BE)
|
||||
|
/// </summary>
|
||||
|
public uint Width { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Gets or sets image height in pixels (BE)
|
||||
|
/// </summary>
|
||||
|
public uint Height { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Gets or sets color channels of the image. 3 = RGB, 4 = RGBA.
|
||||
|
/// </summary>
|
||||
|
public QoiChannels Channels { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Gets or sets color space of the image. 0 = sRGB with linear alpha, 1 = All channels linear
|
||||
|
/// </summary>
|
||||
|
public QoiColorSpace ColorSpace { get; set; } |
||||
|
|
||||
|
/// <inheritdoc/>
|
||||
|
public IDeepCloneable DeepClone() => new QoiMetadata(this); |
||||
|
} |
||||
Binary file not shown.
Loading…
Reference in new issue