diff --git a/src/ImageSharp/ColorSpaces/CieLab.cs b/src/ImageSharp/ColorSpaces/CieLab.cs
index 107be4cb2b..cb08d08bf9 100644
--- a/src/ImageSharp/ColorSpaces/CieLab.cs
+++ b/src/ImageSharp/ColorSpaces/CieLab.cs
@@ -12,7 +12,7 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// Represents a CIE L*a*b* 1976 color.
///
///
- internal struct CieLab : IColorVector, IEquatable, IAlmostEquatable
+ internal readonly struct CieLab : IColorVector, IEquatable, IAlmostEquatable
{
///
/// D50 standard illuminant.
diff --git a/src/ImageSharp/ColorSpaces/CieLch.cs b/src/ImageSharp/ColorSpaces/CieLch.cs
index 834ef56a89..94443fd863 100644
--- a/src/ImageSharp/ColorSpaces/CieLch.cs
+++ b/src/ImageSharp/ColorSpaces/CieLch.cs
@@ -12,7 +12,7 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// Represents the CIE L*C*h°, cylindrical form of the CIE L*a*b* 1976 color.
///
///
- internal struct CieLch : IColorVector, IEquatable, IAlmostEquatable
+ internal readonly struct CieLch : IColorVector, IEquatable, IAlmostEquatable
{
///
/// D50 standard illuminant.
diff --git a/src/ImageSharp/ColorSpaces/CieLchuv.cs b/src/ImageSharp/ColorSpaces/CieLchuv.cs
index f35914d641..705b770d35 100644
--- a/src/ImageSharp/ColorSpaces/CieLchuv.cs
+++ b/src/ImageSharp/ColorSpaces/CieLchuv.cs
@@ -12,7 +12,7 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// Represents the CIE L*C*h°, cylindrical form of the CIE L*u*v* 1976 color.
///
///
- internal struct CieLchuv : IColorVector, IEquatable, IAlmostEquatable
+ internal readonly struct CieLchuv : IColorVector, IEquatable, IAlmostEquatable
{
///
/// D50 standard illuminant.
diff --git a/src/ImageSharp/ColorSpaces/CieLuv.cs b/src/ImageSharp/ColorSpaces/CieLuv.cs
index 9b52517083..b0ae048ab7 100644
--- a/src/ImageSharp/ColorSpaces/CieLuv.cs
+++ b/src/ImageSharp/ColorSpaces/CieLuv.cs
@@ -14,7 +14,7 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// attempted perceptual uniformity
///
///
- internal struct CieLuv : IColorVector, IEquatable, IAlmostEquatable
+ internal readonly struct CieLuv : IColorVector, IEquatable, IAlmostEquatable
{
///
/// D65 standard illuminant.
diff --git a/src/ImageSharp/ColorSpaces/CieXyChromaticityCoordinates.cs b/src/ImageSharp/ColorSpaces/CieXyChromaticityCoordinates.cs
index 487f464d8e..d0a70dd191 100644
--- a/src/ImageSharp/ColorSpaces/CieXyChromaticityCoordinates.cs
+++ b/src/ImageSharp/ColorSpaces/CieXyChromaticityCoordinates.cs
@@ -12,7 +12,7 @@ namespace SixLabors.ImageSharp.ColorSpaces
///
/// Represents the coordinates of CIEXY chromaticity space
///
- internal struct CieXyChromaticityCoordinates : IEquatable, IAlmostEquatable
+ internal readonly struct CieXyChromaticityCoordinates : IEquatable, IAlmostEquatable
{
///
/// Represents a that has X, Y values set to zero.
diff --git a/src/ImageSharp/ColorSpaces/CieXyy.cs b/src/ImageSharp/ColorSpaces/CieXyy.cs
index d5ef4b15d3..751830a0ba 100644
--- a/src/ImageSharp/ColorSpaces/CieXyy.cs
+++ b/src/ImageSharp/ColorSpaces/CieXyy.cs
@@ -12,7 +12,7 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// Represents an CIE xyY 1931 color
///
///
- internal struct CieXyy : IColorVector, IEquatable, IAlmostEquatable
+ internal readonly struct CieXyy : IColorVector, IEquatable, IAlmostEquatable
{
///
/// Represents a that has X, Y, and Y values set to zero.
diff --git a/src/ImageSharp/ColorSpaces/CieXyz.cs b/src/ImageSharp/ColorSpaces/CieXyz.cs
index 908408000a..0f1866009b 100644
--- a/src/ImageSharp/ColorSpaces/CieXyz.cs
+++ b/src/ImageSharp/ColorSpaces/CieXyz.cs
@@ -12,7 +12,7 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// Represents an CIE XYZ 1931 color
///
///
- internal struct CieXyz : IColorVector, IEquatable, IAlmostEquatable
+ internal readonly struct CieXyz : IColorVector, IEquatable, IAlmostEquatable
{
///
/// Represents a that has X, Y, and Z values set to zero.
diff --git a/src/ImageSharp/ColorSpaces/Cmyk.cs b/src/ImageSharp/ColorSpaces/Cmyk.cs
index 2a58a5762a..2eb148a8c3 100644
--- a/src/ImageSharp/ColorSpaces/Cmyk.cs
+++ b/src/ImageSharp/ColorSpaces/Cmyk.cs
@@ -11,7 +11,7 @@ namespace SixLabors.ImageSharp.ColorSpaces
///
/// Represents an CMYK (cyan, magenta, yellow, keyline) color.
///
- internal struct Cmyk : IEquatable, IAlmostEquatable
+ internal readonly struct Cmyk : IEquatable, IAlmostEquatable
{
///
/// Represents a that has C, M, Y, and K values set to zero.
diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Rgb/RgbWorkingSpace.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Rgb/RgbWorkingSpace.cs
index 8a2c66a80c..5a5c39647f 100644
--- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Rgb/RgbWorkingSpace.cs
+++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Rgb/RgbWorkingSpace.cs
@@ -6,7 +6,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation.RgbColorSap
///
/// Trivial implementation of
///
- internal struct RgbWorkingSpace : IRgbWorkingSpace
+ internal readonly struct RgbWorkingSpace : IRgbWorkingSpace
{
///
/// Initializes a new instance of the struct.
diff --git a/src/ImageSharp/ColorSpaces/Hsl.cs b/src/ImageSharp/ColorSpaces/Hsl.cs
index cf880f1548..1944ac0c6b 100644
--- a/src/ImageSharp/ColorSpaces/Hsl.cs
+++ b/src/ImageSharp/ColorSpaces/Hsl.cs
@@ -11,7 +11,7 @@ namespace SixLabors.ImageSharp.ColorSpaces
///
/// Represents a Hsl (hue, saturation, lightness) color.
///
- internal struct Hsl : IColorVector, IEquatable, IAlmostEquatable
+ internal readonly struct Hsl : IColorVector, IEquatable, IAlmostEquatable
{
///
/// Represents a that has H, S, and L values set to zero.
diff --git a/src/ImageSharp/ColorSpaces/Hsv.cs b/src/ImageSharp/ColorSpaces/Hsv.cs
index 9f47393792..45ffd7f121 100644
--- a/src/ImageSharp/ColorSpaces/Hsv.cs
+++ b/src/ImageSharp/ColorSpaces/Hsv.cs
@@ -11,7 +11,7 @@ namespace SixLabors.ImageSharp.ColorSpaces
///
/// Represents a HSV (hue, saturation, value) color. Also known as HSB (hue, saturation, brightness).
///
- internal struct Hsv : IColorVector, IEquatable, IAlmostEquatable
+ internal readonly struct Hsv : IColorVector, IEquatable, IAlmostEquatable
{
///
/// Represents a that has H, S, and V values set to zero.
diff --git a/src/ImageSharp/ColorSpaces/HunterLab.cs b/src/ImageSharp/ColorSpaces/HunterLab.cs
index b5ba7c86c7..de42518d76 100644
--- a/src/ImageSharp/ColorSpaces/HunterLab.cs
+++ b/src/ImageSharp/ColorSpaces/HunterLab.cs
@@ -12,7 +12,7 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// Represents an Hunter LAB color.
///
///
- internal struct HunterLab : IColorVector, IEquatable, IAlmostEquatable
+ internal readonly struct HunterLab : IColorVector, IEquatable, IAlmostEquatable
{
///
/// D50 standard illuminant.
diff --git a/src/ImageSharp/ColorSpaces/LinearRgb.cs b/src/ImageSharp/ColorSpaces/LinearRgb.cs
index 07889c3529..b8c446285a 100644
--- a/src/ImageSharp/ColorSpaces/LinearRgb.cs
+++ b/src/ImageSharp/ColorSpaces/LinearRgb.cs
@@ -11,7 +11,7 @@ namespace SixLabors.ImageSharp.ColorSpaces
///
/// Represents an linear Rgb color with specified working space
///
- internal struct LinearRgb : IColorVector, IEquatable, IAlmostEquatable
+ internal readonly struct LinearRgb : IColorVector, IEquatable, IAlmostEquatable
{
///
/// Represents a that has R, G, and B values set to zero.
diff --git a/src/ImageSharp/ColorSpaces/Lms.cs b/src/ImageSharp/ColorSpaces/Lms.cs
index 82c291de3d..72ac16f213 100644
--- a/src/ImageSharp/ColorSpaces/Lms.cs
+++ b/src/ImageSharp/ColorSpaces/Lms.cs
@@ -13,7 +13,7 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// named after their responsivity (sensitivity) at long, medium and short wavelengths.
///
///
- internal struct Lms : IColorVector, IEquatable, IAlmostEquatable
+ internal readonly struct Lms : IColorVector, IEquatable, IAlmostEquatable
{
///
/// Represents a that has L, M, and S values set to zero.
diff --git a/src/ImageSharp/ColorSpaces/Rgb.cs b/src/ImageSharp/ColorSpaces/Rgb.cs
index 8ac8411b20..53fa6086df 100644
--- a/src/ImageSharp/ColorSpaces/Rgb.cs
+++ b/src/ImageSharp/ColorSpaces/Rgb.cs
@@ -11,7 +11,7 @@ namespace SixLabors.ImageSharp.ColorSpaces
///
/// Represents an RGB color with specified working space
///
- internal struct Rgb : IColorVector, IEquatable, IAlmostEquatable
+ internal readonly struct Rgb : IColorVector, IEquatable, IAlmostEquatable
{
///
/// Represents a that has R, G, and B values set to zero.
diff --git a/src/ImageSharp/ColorSpaces/YCbCr.cs b/src/ImageSharp/ColorSpaces/YCbCr.cs
index 708a74308a..44a0b245d5 100644
--- a/src/ImageSharp/ColorSpaces/YCbCr.cs
+++ b/src/ImageSharp/ColorSpaces/YCbCr.cs
@@ -13,7 +13,7 @@ namespace SixLabors.ImageSharp.ColorSpaces
///
///
///
- internal struct YCbCr : IColorVector, IEquatable, IAlmostEquatable
+ internal readonly struct YCbCr : IColorVector, IEquatable, IAlmostEquatable
{
///
/// Represents a that has Y, Cb, and Cr values set to zero.
diff --git a/src/ImageSharp/Formats/Gif/PackedField.cs b/src/ImageSharp/Formats/Gif/PackedField.cs
index 962e2082bf..28a415e2b8 100644
--- a/src/ImageSharp/Formats/Gif/PackedField.cs
+++ b/src/ImageSharp/Formats/Gif/PackedField.cs
@@ -9,7 +9,7 @@ namespace SixLabors.ImageSharp.Formats.Gif
/// Represents a byte of data in a GIF data stream which contains a number
/// of data items.
///
- internal struct PackedField : IEquatable
+ internal readonly struct PackedField : IEquatable
{
///
/// The individual bits representing the packed byte.
diff --git a/src/ImageSharp/Formats/Jpeg/Common/Decoder/AdobeMarker.cs b/src/ImageSharp/Formats/Jpeg/Common/Decoder/AdobeMarker.cs
index 0ec2297d76..d55e36bd48 100644
--- a/src/ImageSharp/Formats/Jpeg/Common/Decoder/AdobeMarker.cs
+++ b/src/ImageSharp/Formats/Jpeg/Common/Decoder/AdobeMarker.cs
@@ -10,7 +10,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Common.Decoder
/// Provides information about the Adobe marker segment.
///
/// See the included 5116.DCT.pdf file in the source for more information.
- internal struct AdobeMarker : IEquatable
+ internal readonly struct AdobeMarker : IEquatable
{
///
/// Gets the length of an adobe marker segment.
diff --git a/src/ImageSharp/Formats/Jpeg/Common/Decoder/JFifMarker.cs b/src/ImageSharp/Formats/Jpeg/Common/Decoder/JFifMarker.cs
index cba7be5539..c856fd04a6 100644
--- a/src/ImageSharp/Formats/Jpeg/Common/Decoder/JFifMarker.cs
+++ b/src/ImageSharp/Formats/Jpeg/Common/Decoder/JFifMarker.cs
@@ -9,7 +9,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Common.Decoder
/// Provides information about the JFIF marker segment
/// TODO: Thumbnail?
///
- internal struct JFifMarker : IEquatable
+ internal readonly struct JFifMarker : IEquatable
{
///
/// Gets the length of an JFIF marker segment.
diff --git a/src/ImageSharp/Formats/Jpeg/GolangPort/Components/Decoder/InputProcessor.cs b/src/ImageSharp/Formats/Jpeg/GolangPort/Components/Decoder/InputProcessor.cs
index 88599808fc..fd6a7833a7 100644
--- a/src/ImageSharp/Formats/Jpeg/GolangPort/Components/Decoder/InputProcessor.cs
+++ b/src/ImageSharp/Formats/Jpeg/GolangPort/Components/Decoder/InputProcessor.cs
@@ -5,8 +5,6 @@ using System;
using System.IO;
using System.Runtime.CompilerServices;
-using SixLabors.ImageSharp.Memory;
-
namespace SixLabors.ImageSharp.Formats.Jpeg.GolangPort.Components.Decoder
{
///
diff --git a/src/ImageSharp/Formats/Jpeg/GolangPort/Components/Encoder/HuffmanLut.cs b/src/ImageSharp/Formats/Jpeg/GolangPort/Components/Encoder/HuffmanLut.cs
index 2fb01c5c8c..7756a7e3ba 100644
--- a/src/ImageSharp/Formats/Jpeg/GolangPort/Components/Encoder/HuffmanLut.cs
+++ b/src/ImageSharp/Formats/Jpeg/GolangPort/Components/Encoder/HuffmanLut.cs
@@ -9,7 +9,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.GolangPort.Components.Encoder
/// codeword size in bits and the 24 least significant bits hold the codeword.
/// The maximum codeword size is 16 bits.
///
- internal struct HuffmanLut
+ internal readonly struct HuffmanLut
{
///
/// The compiled representations of theHuffmanSpec.
diff --git a/src/ImageSharp/Formats/Jpeg/GolangPort/Components/Encoder/HuffmanSpec.cs b/src/ImageSharp/Formats/Jpeg/GolangPort/Components/Encoder/HuffmanSpec.cs
index 8e40cb3689..1c8228aaa2 100644
--- a/src/ImageSharp/Formats/Jpeg/GolangPort/Components/Encoder/HuffmanSpec.cs
+++ b/src/ImageSharp/Formats/Jpeg/GolangPort/Components/Encoder/HuffmanSpec.cs
@@ -6,7 +6,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.GolangPort.Components.Encoder
///
/// The Huffman encoding specifications.
///
- internal struct HuffmanSpec
+ internal readonly struct HuffmanSpec
{
#pragma warning disable SA1118 // ParameterMustNotSpanMultipleLines
diff --git a/src/ImageSharp/Formats/Jpeg/PdfJsPort/Components/PdfJsYCbCrToRgbTables.cs b/src/ImageSharp/Formats/Jpeg/PdfJsPort/Components/PdfJsYCbCrToRgbTables.cs
index ddc577270b..203a7b1eb2 100644
--- a/src/ImageSharp/Formats/Jpeg/PdfJsPort/Components/PdfJsYCbCrToRgbTables.cs
+++ b/src/ImageSharp/Formats/Jpeg/PdfJsPort/Components/PdfJsYCbCrToRgbTables.cs
@@ -10,7 +10,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components
/// Provides 8-bit lookup tables for converting from YCbCr to Rgb colorspace.
/// Methods to build the tables are based on libjpeg implementation.
///
- internal struct PdfJsYCbCrToRgbTables
+ internal readonly struct PdfJsYCbCrToRgbTables
{
///
/// The red red-chrominance table
diff --git a/src/ImageSharp/Memory/BufferArea{T}.cs b/src/ImageSharp/Memory/BufferArea{T}.cs
index 588eae483d..990b494fc7 100644
--- a/src/ImageSharp/Memory/BufferArea{T}.cs
+++ b/src/ImageSharp/Memory/BufferArea{T}.cs
@@ -9,7 +9,7 @@ namespace SixLabors.ImageSharp.Memory
/// This type is kind-of 2D Span, but it can live on heap.
///
/// The element type
- internal struct BufferArea
+ internal readonly struct BufferArea
where T : struct
{
///
diff --git a/src/ImageSharp/MetaData/Profiles/ICC/Various/IccColorantTableEntry.cs b/src/ImageSharp/MetaData/Profiles/ICC/Various/IccColorantTableEntry.cs
index 17127110d6..c5b005ea09 100644
--- a/src/ImageSharp/MetaData/Profiles/ICC/Various/IccColorantTableEntry.cs
+++ b/src/ImageSharp/MetaData/Profiles/ICC/Various/IccColorantTableEntry.cs
@@ -8,7 +8,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
///
/// Entry of ICC colorant table
///
- internal struct IccColorantTableEntry : IEquatable
+ internal readonly struct IccColorantTableEntry : IEquatable
{
///
/// Initializes a new instance of the struct.
diff --git a/src/ImageSharp/MetaData/Profiles/ICC/Various/IccNamedColor.cs b/src/ImageSharp/MetaData/Profiles/ICC/Various/IccNamedColor.cs
index 98107e8281..22916c1344 100644
--- a/src/ImageSharp/MetaData/Profiles/ICC/Various/IccNamedColor.cs
+++ b/src/ImageSharp/MetaData/Profiles/ICC/Various/IccNamedColor.cs
@@ -9,7 +9,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
///
/// A specific color with a name
///
- internal struct IccNamedColor : IEquatable
+ internal readonly struct IccNamedColor : IEquatable
{
///
/// Initializes a new instance of the struct.
diff --git a/src/ImageSharp/MetaData/Profiles/ICC/Various/IccPositionNumber.cs b/src/ImageSharp/MetaData/Profiles/ICC/Various/IccPositionNumber.cs
index 6258ca2f36..d886dc099c 100644
--- a/src/ImageSharp/MetaData/Profiles/ICC/Various/IccPositionNumber.cs
+++ b/src/ImageSharp/MetaData/Profiles/ICC/Various/IccPositionNumber.cs
@@ -8,7 +8,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
///
/// Position of an object within an ICC profile
///
- internal struct IccPositionNumber : IEquatable
+ internal readonly struct IccPositionNumber : IEquatable
{
///
/// Initializes a new instance of the struct.
diff --git a/src/ImageSharp/MetaData/Profiles/ICC/Various/IccProfileId.cs b/src/ImageSharp/MetaData/Profiles/ICC/Various/IccProfileId.cs
index 1f96540df3..4070f835d6 100644
--- a/src/ImageSharp/MetaData/Profiles/ICC/Various/IccProfileId.cs
+++ b/src/ImageSharp/MetaData/Profiles/ICC/Various/IccProfileId.cs
@@ -8,7 +8,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
///
/// ICC Profile ID
///
- public struct IccProfileId : IEquatable
+ public readonly struct IccProfileId : IEquatable
{
///
/// A profile ID with all values set to zero
diff --git a/src/ImageSharp/MetaData/Profiles/ICC/Various/IccResponseNumber.cs b/src/ImageSharp/MetaData/Profiles/ICC/Various/IccResponseNumber.cs
index a10c55f4e4..c786a0fd45 100644
--- a/src/ImageSharp/MetaData/Profiles/ICC/Various/IccResponseNumber.cs
+++ b/src/ImageSharp/MetaData/Profiles/ICC/Various/IccResponseNumber.cs
@@ -8,7 +8,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
///
/// Associates a normalized device code with a measurement value
///
- internal struct IccResponseNumber : IEquatable
+ internal readonly struct IccResponseNumber : IEquatable
{
///
/// Initializes a new instance of the struct.
diff --git a/src/ImageSharp/MetaData/Profiles/ICC/Various/IccScreeningChannel.cs b/src/ImageSharp/MetaData/Profiles/ICC/Various/IccScreeningChannel.cs
index f41858f303..e1f1bb32fe 100644
--- a/src/ImageSharp/MetaData/Profiles/ICC/Various/IccScreeningChannel.cs
+++ b/src/ImageSharp/MetaData/Profiles/ICC/Various/IccScreeningChannel.cs
@@ -8,7 +8,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
///
/// A single channel of a
///
- internal struct IccScreeningChannel : IEquatable
+ internal readonly struct IccScreeningChannel : IEquatable
{
///
/// Initializes a new instance of the struct.
diff --git a/src/ImageSharp/MetaData/Profiles/ICC/Various/IccTagTableEntry.cs b/src/ImageSharp/MetaData/Profiles/ICC/Various/IccTagTableEntry.cs
index 5464de9c5f..7cb5c7901e 100644
--- a/src/ImageSharp/MetaData/Profiles/ICC/Various/IccTagTableEntry.cs
+++ b/src/ImageSharp/MetaData/Profiles/ICC/Various/IccTagTableEntry.cs
@@ -8,7 +8,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
///
/// Entry of ICC tag table
///
- internal struct IccTagTableEntry : IEquatable
+ internal readonly struct IccTagTableEntry : IEquatable
{
///
/// Initializes a new instance of the struct.
diff --git a/src/ImageSharp/Numerics/ValueSize.cs b/src/ImageSharp/Numerics/ValueSize.cs
index 659e0ebfe1..fcf61a586d 100644
--- a/src/ImageSharp/Numerics/ValueSize.cs
+++ b/src/ImageSharp/Numerics/ValueSize.cs
@@ -9,7 +9,7 @@ namespace SixLabors.ImageSharp
///
/// Represents a value in relation to a value on the image
///
- internal struct ValueSize : IEquatable
+ internal readonly struct ValueSize : IEquatable
{
///
/// Initializes a new instance of the struct.
diff --git a/src/ImageSharp/Processing/Processors/Dithering/PixelPair.cs b/src/ImageSharp/Processing/Processors/Dithering/PixelPair.cs
index e3b9c11bdf..07045bb5ab 100644
--- a/src/ImageSharp/Processing/Processors/Dithering/PixelPair.cs
+++ b/src/ImageSharp/Processing/Processors/Dithering/PixelPair.cs
@@ -10,7 +10,7 @@ namespace SixLabors.ImageSharp.Processing.Processors
/// Represents a composite pair of pixels. Used for caching color distance lookups.
///
/// The pixel format.
- internal struct PixelPair : IEquatable>
+ internal readonly struct PixelPair : IEquatable>
where TPixel : struct, IPixel
{
///