diff --git a/src/ImageSharp/Formats/PixelTypeInfo.cs b/src/ImageSharp/Formats/PixelTypeInfo.cs
index 1328c65280..15fd0dc2a6 100644
--- a/src/ImageSharp/Formats/PixelTypeInfo.cs
+++ b/src/ImageSharp/Formats/PixelTypeInfo.cs
@@ -12,7 +12,7 @@ namespace SixLabors.ImageSharp.Formats;
///
/// Contains information about the pixels that make up an images visual data.
///
-public class PixelTypeInfo
+public readonly struct PixelTypeInfo
{
///
/// Initializes a new instance of the class.
@@ -21,33 +21,25 @@ public class PixelTypeInfo
public PixelTypeInfo(int bitsPerPixel)
=> this.BitsPerPixel = bitsPerPixel;
- ///
- /// Initializes a new instance of the class.
- ///
- /// Color depth, in number of bits per pixel.
- /// The pixel alpha transparency behavior.
- public PixelTypeInfo(int bitsPerPixel, PixelAlphaRepresentation alpha)
- {
- this.BitsPerPixel = bitsPerPixel;
- this.AlphaRepresentation = alpha;
- }
-
///
/// Gets color depth, in number of bits per pixel.
///
- public int BitsPerPixel { get; }
+ public int BitsPerPixel { get; init; }
+
+ public byte ComponentCount { get; init; }
///
/// Gets the pixel alpha transparency behavior.
/// means unknown, unspecified.
///
- public PixelAlphaRepresentation? AlphaRepresentation { get; }
-
- internal static PixelTypeInfo Create()
- where TPixel : unmanaged, IPixel
- => new(Unsafe.SizeOf() * 8);
+ public PixelAlphaRepresentation? AlphaRepresentation { get; init; }
- internal static PixelTypeInfo Create(PixelAlphaRepresentation alpha)
+ internal static PixelTypeInfo Create(byte componentCount, PixelAlphaRepresentation pixelAlphaRepresentation)
where TPixel : unmanaged, IPixel
- => new(Unsafe.SizeOf() * 8, alpha);
+ => new()
+ {
+ BitsPerPixel = Unsafe.SizeOf() * 8,
+ ComponentCount = componentCount,
+ AlphaRepresentation = pixelAlphaRepresentation
+ };
}
diff --git a/src/ImageSharp/Image{TPixel}.cs b/src/ImageSharp/Image{TPixel}.cs
index c24014e698..38f0b94d62 100644
--- a/src/ImageSharp/Image{TPixel}.cs
+++ b/src/ImageSharp/Image{TPixel}.cs
@@ -78,7 +78,7 @@ public sealed class Image : Image
/// The height of the image in pixels.
/// The images metadata.
internal Image(Configuration configuration, int width, int height, ImageMetadata? metadata)
- : base(configuration, PixelTypeInfo.Create(), metadata ?? new(), width, height)
+ : base(configuration, TPixel.GetPixelTypeInfo(), metadata ?? new(), width, height)
=> this.frames = new ImageFrameCollection(this, width, height, default(TPixel));
///
@@ -111,7 +111,7 @@ public sealed class Image : Image
int width,
int height,
ImageMetadata metadata)
- : base(configuration, PixelTypeInfo.Create(), metadata, width, height)
+ : base(configuration, TPixel.GetPixelTypeInfo(), metadata, width, height)
=> this.frames = new ImageFrameCollection(this, width, height, memoryGroup);
///
@@ -129,7 +129,7 @@ public sealed class Image : Image
int height,
TPixel backgroundColor,
ImageMetadata? metadata)
- : base(configuration, PixelTypeInfo.Create(), metadata ?? new(), width, height)
+ : base(configuration, TPixel.GetPixelTypeInfo(), metadata ?? new(), width, height)
=> this.frames = new ImageFrameCollection(this, width, height, backgroundColor);
///
@@ -140,7 +140,7 @@ public sealed class Image : Image
/// The images metadata.
/// The frames that will be owned by this image instance.
internal Image(Configuration configuration, ImageMetadata metadata, IEnumerable> frames)
- : base(configuration, PixelTypeInfo.Create(), metadata, ValidateFramesAndGetSize(frames))
+ : base(configuration, TPixel.GetPixelTypeInfo(), metadata, ValidateFramesAndGetSize(frames))
=> this.frames = new ImageFrameCollection(this, frames);
///
diff --git a/src/ImageSharp/PixelFormats/IPixel.cs b/src/ImageSharp/PixelFormats/IPixel.cs
index 0994444668..cddf6453d9 100644
--- a/src/ImageSharp/PixelFormats/IPixel.cs
+++ b/src/ImageSharp/PixelFormats/IPixel.cs
@@ -2,6 +2,7 @@
// Licensed under the Six Labors Split License.
using System.Numerics;
+using SixLabors.ImageSharp.Formats;
namespace SixLabors.ImageSharp.PixelFormats;
@@ -14,6 +15,8 @@ namespace SixLabors.ImageSharp.PixelFormats;
public interface IPixel : IPixel, IEquatable
where TSelf : unmanaged, IPixel
{
+ static abstract PixelTypeInfo GetPixelTypeInfo();
+
///
/// Creates a instance for this pixel type.
/// This method is not intended to be consumed directly. Use instead.
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/A8.cs b/src/ImageSharp/PixelFormats/PixelImplementations/A8.cs
index 0256907121..b2d99ac4be 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/A8.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/A8.cs
@@ -3,6 +3,7 @@
using System.Numerics;
using System.Runtime.CompilerServices;
+using SixLabors.ImageSharp.Formats;
namespace SixLabors.ImageSharp.PixelFormats;
@@ -55,6 +56,8 @@ public partial struct A8 : IPixel, IPackedVector
[MethodImpl(InliningOptions.ShortMethod)]
public static bool operator !=(A8 left, A8 right) => !left.Equals(right);
+ public static PixelTypeInfo GetPixelTypeInfo() => PixelTypeInfo.Create(1, PixelAlphaRepresentation.Unassociated);
+
///
public readonly PixelOperations CreatePixelOperations() => new PixelOperations();
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Abgr32.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Abgr32.cs
index 8bd24c7a01..7c0dba5521 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Abgr32.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Abgr32.cs
@@ -4,6 +4,7 @@
using System.Numerics;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
+using SixLabors.ImageSharp.Formats;
namespace SixLabors.ImageSharp.PixelFormats;
@@ -183,6 +184,8 @@ public partial struct Abgr32 : IPixel, IPackedVector
[MethodImpl(InliningOptions.ShortMethod)]
public static bool operator !=(Abgr32 left, Abgr32 right) => !left.Equals(right);
+ public static PixelTypeInfo GetPixelTypeInfo() => PixelTypeInfo.Create(4, PixelAlphaRepresentation.Unassociated);
+
///
public readonly PixelOperations CreatePixelOperations() => new PixelOperations();
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Argb32.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Argb32.cs
index fa8af98a0b..f09f25ab0e 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Argb32.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Argb32.cs
@@ -4,6 +4,7 @@
using System.Numerics;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
+using SixLabors.ImageSharp.Formats;
namespace SixLabors.ImageSharp.PixelFormats;
@@ -183,6 +184,8 @@ public partial struct Argb32 : IPixel, IPackedVector
[MethodImpl(InliningOptions.ShortMethod)]
public static bool operator !=(Argb32 left, Argb32 right) => !left.Equals(right);
+ public static PixelTypeInfo GetPixelTypeInfo() => PixelTypeInfo.Create(4, PixelAlphaRepresentation.Unassociated);
+
///
public readonly PixelOperations CreatePixelOperations() => new PixelOperations();
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Bgr24.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Bgr24.cs
index aedf4ad198..499c72b8da 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Bgr24.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Bgr24.cs
@@ -4,6 +4,7 @@
using System.Numerics;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
+using SixLabors.ImageSharp.Formats;
namespace SixLabors.ImageSharp.PixelFormats;
@@ -87,6 +88,8 @@ public partial struct Bgr24 : IPixel
[MethodImpl(InliningOptions.ShortMethod)]
public static bool operator !=(Bgr24 left, Bgr24 right) => !left.Equals(right);
+ public static PixelTypeInfo GetPixelTypeInfo() => PixelTypeInfo.Create(3, PixelAlphaRepresentation.None);
+
///
public readonly PixelOperations CreatePixelOperations() => new PixelOperations();
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Bgr565.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Bgr565.cs
index ac3b6f8299..1ac9fbddb8 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Bgr565.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Bgr565.cs
@@ -3,6 +3,7 @@
using System.Numerics;
using System.Runtime.CompilerServices;
+using SixLabors.ImageSharp.Formats;
namespace SixLabors.ImageSharp.PixelFormats;
@@ -59,6 +60,8 @@ public partial struct Bgr565 : IPixel, IPackedVector
[MethodImpl(InliningOptions.ShortMethod)]
public static bool operator !=(Bgr565 left, Bgr565 right) => !left.Equals(right);
+ public static PixelTypeInfo GetPixelTypeInfo() => PixelTypeInfo.Create(3, PixelAlphaRepresentation.None);
+
///
public readonly PixelOperations CreatePixelOperations() => new PixelOperations();
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Bgra32.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Bgra32.cs
index d7222f2ef8..a689067e58 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Bgra32.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Bgra32.cs
@@ -4,6 +4,7 @@
using System.Numerics;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
+using SixLabors.ImageSharp.Formats;
namespace SixLabors.ImageSharp.PixelFormats;
@@ -136,6 +137,8 @@ public partial struct Bgra32 : IPixel, IPackedVector
[MethodImpl(InliningOptions.ShortMethod)]
public static bool operator !=(Bgra32 left, Bgra32 right) => !left.Equals(right);
+ public static PixelTypeInfo GetPixelTypeInfo() => PixelTypeInfo.Create(4, PixelAlphaRepresentation.Unassociated);
+
///
public readonly PixelOperations CreatePixelOperations() => new PixelOperations();
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Bgra4444.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Bgra4444.cs
index 8ba32c8ac2..de94817d45 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Bgra4444.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Bgra4444.cs
@@ -3,6 +3,7 @@
using System.Numerics;
using System.Runtime.CompilerServices;
+using SixLabors.ImageSharp.Formats;
namespace SixLabors.ImageSharp.PixelFormats;
@@ -57,6 +58,8 @@ public partial struct Bgra4444 : IPixel, IPackedVector
[MethodImpl(InliningOptions.ShortMethod)]
public static bool operator !=(Bgra4444 left, Bgra4444 right) => !left.Equals(right);
+ public static PixelTypeInfo GetPixelTypeInfo() => PixelTypeInfo.Create(4, PixelAlphaRepresentation.Unassociated);
+
///
public readonly PixelOperations CreatePixelOperations() => new PixelOperations();
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Bgra5551.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Bgra5551.cs
index c282f03d89..2bfbde7c64 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Bgra5551.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Bgra5551.cs
@@ -3,6 +3,7 @@
using System.Numerics;
using System.Runtime.CompilerServices;
+using SixLabors.ImageSharp.Formats;
namespace SixLabors.ImageSharp.PixelFormats;
@@ -60,6 +61,8 @@ public partial struct Bgra5551 : IPixel, IPackedVector
[MethodImpl(InliningOptions.ShortMethod)]
public static bool operator !=(Bgra5551 left, Bgra5551 right) => !left.Equals(right);
+ public static PixelTypeInfo GetPixelTypeInfo() => PixelTypeInfo.Create(4, PixelAlphaRepresentation.Unassociated);
+
///
public readonly PixelOperations CreatePixelOperations() => new PixelOperations();
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Byte4.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Byte4.cs
index e699e5fe58..e1d6bdd52e 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Byte4.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Byte4.cs
@@ -3,6 +3,7 @@
using System.Numerics;
using System.Runtime.CompilerServices;
+using SixLabors.ImageSharp.Formats;
namespace SixLabors.ImageSharp.PixelFormats;
@@ -60,6 +61,8 @@ public partial struct Byte4 : IPixel, IPackedVector
[MethodImpl(InliningOptions.ShortMethod)]
public static bool operator !=(Byte4 left, Byte4 right) => !left.Equals(right);
+ public static PixelTypeInfo GetPixelTypeInfo() => PixelTypeInfo.Create(4, PixelAlphaRepresentation.Unassociated);
+
///
public readonly PixelOperations CreatePixelOperations() => new PixelOperations();
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/HalfSingle.cs b/src/ImageSharp/PixelFormats/PixelImplementations/HalfSingle.cs
index db1e02adc2..b37b7260c8 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/HalfSingle.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/HalfSingle.cs
@@ -3,6 +3,7 @@
using System.Numerics;
using System.Runtime.CompilerServices;
+using SixLabors.ImageSharp.Formats;
namespace SixLabors.ImageSharp.PixelFormats;
@@ -45,6 +46,8 @@ public partial struct HalfSingle : IPixel, IPackedVector
[MethodImpl(InliningOptions.ShortMethod)]
public static bool operator !=(HalfSingle left, HalfSingle right) => !left.Equals(right);
+ public static PixelTypeInfo GetPixelTypeInfo() => PixelTypeInfo.Create(1, PixelAlphaRepresentation.None);
+
///
public PixelOperations CreatePixelOperations() => new PixelOperations();
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/HalfVector2.cs b/src/ImageSharp/PixelFormats/PixelImplementations/HalfVector2.cs
index 9caae58c95..02c3433fda 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/HalfVector2.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/HalfVector2.cs
@@ -3,6 +3,7 @@
using System.Numerics;
using System.Runtime.CompilerServices;
+using SixLabors.ImageSharp.Formats;
namespace SixLabors.ImageSharp.PixelFormats;
@@ -52,6 +53,8 @@ public partial struct HalfVector2 : IPixel, IPackedVector
[MethodImpl(InliningOptions.ShortMethod)]
public static bool operator !=(HalfVector2 left, HalfVector2 right) => !left.Equals(right);
+ public static PixelTypeInfo GetPixelTypeInfo() => PixelTypeInfo.Create(2, PixelAlphaRepresentation.None);
+
///
public readonly PixelOperations CreatePixelOperations() => new PixelOperations();
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/HalfVector4.cs b/src/ImageSharp/PixelFormats/PixelImplementations/HalfVector4.cs
index 609fec3bd7..ee8be97c1c 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/HalfVector4.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/HalfVector4.cs
@@ -3,6 +3,7 @@
using System.Numerics;
using System.Runtime.CompilerServices;
+using SixLabors.ImageSharp.Formats;
namespace SixLabors.ImageSharp.PixelFormats;
@@ -57,6 +58,8 @@ public partial struct HalfVector4 : IPixel, IPackedVector
[MethodImpl(InliningOptions.ShortMethod)]
public static bool operator !=(HalfVector4 left, HalfVector4 right) => !left.Equals(right);
+ public static PixelTypeInfo GetPixelTypeInfo() => PixelTypeInfo.Create(4, PixelAlphaRepresentation.Unassociated);
+
///
public readonly PixelOperations CreatePixelOperations() => new PixelOperations();
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/L16.cs b/src/ImageSharp/PixelFormats/PixelImplementations/L16.cs
index c6ee8744d9..2b70c15635 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/L16.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/L16.cs
@@ -3,6 +3,7 @@
using System.Numerics;
using System.Runtime.CompilerServices;
+using SixLabors.ImageSharp.Formats;
namespace SixLabors.ImageSharp.PixelFormats;
@@ -47,6 +48,8 @@ public partial struct L16 : IPixel, IPackedVector
[MethodImpl(InliningOptions.ShortMethod)]
public static bool operator !=(L16 left, L16 right) => !left.Equals(right);
+ public static PixelTypeInfo GetPixelTypeInfo() => PixelTypeInfo.Create(1, PixelAlphaRepresentation.None);
+
///
public readonly PixelOperations CreatePixelOperations() => new PixelOperations();
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/L8.cs b/src/ImageSharp/PixelFormats/PixelImplementations/L8.cs
index 383e09b270..df61897067 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/L8.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/L8.cs
@@ -3,6 +3,7 @@
using System.Numerics;
using System.Runtime.CompilerServices;
+using SixLabors.ImageSharp.Formats;
namespace SixLabors.ImageSharp.PixelFormats;
@@ -48,6 +49,8 @@ public partial struct L8 : IPixel, IPackedVector
[MethodImpl(InliningOptions.ShortMethod)]
public static bool operator !=(L8 left, L8 right) => !left.Equals(right);
+ public static PixelTypeInfo GetPixelTypeInfo() => PixelTypeInfo.Create(1, PixelAlphaRepresentation.None);
+
///
public readonly PixelOperations CreatePixelOperations() => new PixelOperations();
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/La16.cs b/src/ImageSharp/PixelFormats/PixelImplementations/La16.cs
index 58aeb61890..97e5db9f04 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/La16.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/La16.cs
@@ -4,6 +4,7 @@
using System.Numerics;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
+using SixLabors.ImageSharp.Formats;
namespace SixLabors.ImageSharp.PixelFormats;
@@ -71,6 +72,8 @@ public partial struct La16 : IPixel, IPackedVector
[MethodImpl(InliningOptions.ShortMethod)]
public static bool operator !=(La16 left, La16 right) => !left.Equals(right);
+ public static PixelTypeInfo GetPixelTypeInfo() => PixelTypeInfo.Create(2, PixelAlphaRepresentation.Unassociated);
+
///
public readonly PixelOperations CreatePixelOperations() => new PixelOperations();
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/La32.cs b/src/ImageSharp/PixelFormats/PixelImplementations/La32.cs
index db7f433293..090824a839 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/La32.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/La32.cs
@@ -4,6 +4,7 @@
using System.Numerics;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
+using SixLabors.ImageSharp.Formats;
namespace SixLabors.ImageSharp.PixelFormats;
@@ -73,6 +74,8 @@ public partial struct La32 : IPixel, IPackedVector
[MethodImpl(InliningOptions.ShortMethod)]
public static bool operator !=(La32 left, La32 right) => !left.Equals(right);
+ public static PixelTypeInfo GetPixelTypeInfo() => PixelTypeInfo.Create(2, PixelAlphaRepresentation.Unassociated);
+
///
public readonly PixelOperations CreatePixelOperations() => new PixelOperations();
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedByte2.cs b/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedByte2.cs
index 92b9e6148a..ba56e9ecd4 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedByte2.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedByte2.cs
@@ -3,6 +3,7 @@
using System.Numerics;
using System.Runtime.CompilerServices;
+using SixLabors.ImageSharp.Formats;
namespace SixLabors.ImageSharp.PixelFormats;
@@ -60,6 +61,8 @@ public partial struct NormalizedByte2 : IPixel, IPackedVector !left.Equals(right);
+ public static PixelTypeInfo GetPixelTypeInfo() => PixelTypeInfo.Create(2, PixelAlphaRepresentation.None);
+
///
public readonly PixelOperations CreatePixelOperations() => new PixelOperations();
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedByte4.cs b/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedByte4.cs
index f87bb5a602..27fed194f8 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedByte4.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedByte4.cs
@@ -3,6 +3,7 @@
using System.Numerics;
using System.Runtime.CompilerServices;
+using SixLabors.ImageSharp.Formats;
namespace SixLabors.ImageSharp.PixelFormats;
@@ -62,6 +63,8 @@ public partial struct NormalizedByte4 : IPixel, IPackedVector !left.Equals(right);
+ public static PixelTypeInfo GetPixelTypeInfo() => PixelTypeInfo.Create(4, PixelAlphaRepresentation.Unassociated);
+
///
public readonly PixelOperations CreatePixelOperations() => new PixelOperations();
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedShort2.cs b/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedShort2.cs
index f77dd69b71..55ab0888b8 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedShort2.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedShort2.cs
@@ -3,6 +3,7 @@
using System.Numerics;
using System.Runtime.CompilerServices;
+using SixLabors.ImageSharp.Formats;
namespace SixLabors.ImageSharp.PixelFormats;
@@ -61,6 +62,8 @@ public partial struct NormalizedShort2 : IPixel, IPackedVector
[MethodImpl(InliningOptions.ShortMethod)]
public static bool operator !=(NormalizedShort2 left, NormalizedShort2 right) => !left.Equals(right);
+ public static PixelTypeInfo GetPixelTypeInfo() => PixelTypeInfo.Create(2, PixelAlphaRepresentation.None);
+
///
public readonly PixelOperations CreatePixelOperations() => new PixelOperations();
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedShort4.cs b/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedShort4.cs
index 989edbd2ba..0306a63293 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedShort4.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedShort4.cs
@@ -3,6 +3,7 @@
using System.Numerics;
using System.Runtime.CompilerServices;
+using SixLabors.ImageSharp.Formats;
namespace SixLabors.ImageSharp.PixelFormats;
@@ -63,6 +64,8 @@ public partial struct NormalizedShort4 : IPixel, IPackedVector
[MethodImpl(InliningOptions.ShortMethod)]
public static bool operator !=(NormalizedShort4 left, NormalizedShort4 right) => !left.Equals(right);
+ public static PixelTypeInfo GetPixelTypeInfo() => PixelTypeInfo.Create(4, PixelAlphaRepresentation.Unassociated);
+
///
public readonly PixelOperations CreatePixelOperations() => new PixelOperations();
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/A8.PixelOperations.cs b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/A8.PixelOperations.cs
index a7b4b5df00..131191ee29 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/A8.PixelOperations.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/A8.PixelOperations.cs
@@ -13,12 +13,5 @@ public partial struct A8
///
/// Provides optimized overrides for bulk operations.
///
- internal class PixelOperations : PixelOperations
- {
- private static readonly Lazy LazyInfo =
- new Lazy(() => PixelTypeInfo.Create(PixelAlphaRepresentation.Unassociated), true);
-
- ///
- public override PixelTypeInfo GetPixelTypeInfo() => LazyInfo.Value;
- }
+ internal class PixelOperations : PixelOperations;
}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Abgr32.PixelOperations.cs b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Abgr32.PixelOperations.cs
index 66f3ecb245..17ca5edd81 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Abgr32.PixelOperations.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Abgr32.PixelOperations.cs
@@ -13,12 +13,5 @@ public partial struct Abgr32
///
/// Provides optimized overrides for bulk operations.
///
- internal partial class PixelOperations : PixelOperations
- {
- private static readonly Lazy LazyInfo =
- new Lazy(() => PixelTypeInfo.Create(PixelAlphaRepresentation.Unassociated), true);
-
- ///
- public override PixelTypeInfo GetPixelTypeInfo() => LazyInfo.Value;
- }
+ internal partial class PixelOperations : PixelOperations;
}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Argb32.PixelOperations.cs b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Argb32.PixelOperations.cs
index 894e92963e..f2a5eb28b0 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Argb32.PixelOperations.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Argb32.PixelOperations.cs
@@ -13,12 +13,5 @@ public partial struct Argb32
///
/// Provides optimized overrides for bulk operations.
///
- internal partial class PixelOperations : PixelOperations
- {
- private static readonly Lazy LazyInfo =
- new Lazy(() => PixelTypeInfo.Create(PixelAlphaRepresentation.Unassociated), true);
-
- ///
- public override PixelTypeInfo GetPixelTypeInfo() => LazyInfo.Value;
- }
+ internal partial class PixelOperations : PixelOperations;
}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Bgr24.PixelOperations.cs b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Bgr24.PixelOperations.cs
index a8f6ab1556..05b198636f 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Bgr24.PixelOperations.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Bgr24.PixelOperations.cs
@@ -13,12 +13,5 @@ public partial struct Bgr24
///
/// Provides optimized overrides for bulk operations.
///
- internal partial class PixelOperations : PixelOperations
- {
- private static readonly Lazy LazyInfo =
- new Lazy(() => PixelTypeInfo.Create(PixelAlphaRepresentation.None), true);
-
- ///
- public override PixelTypeInfo GetPixelTypeInfo() => LazyInfo.Value;
- }
+ internal partial class PixelOperations : PixelOperations;
}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Bgr565.PixelOperations.cs b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Bgr565.PixelOperations.cs
index de96903256..7217b7c0b0 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Bgr565.PixelOperations.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Bgr565.PixelOperations.cs
@@ -13,12 +13,5 @@ public partial struct Bgr565
///
/// Provides optimized overrides for bulk operations.
///
- internal class PixelOperations : PixelOperations
- {
- private static readonly Lazy LazyInfo =
- new Lazy(() => PixelTypeInfo.Create(PixelAlphaRepresentation.None), true);
-
- ///
- public override PixelTypeInfo GetPixelTypeInfo() => LazyInfo.Value;
- }
+ internal class PixelOperations : PixelOperations;
}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Bgra32.PixelOperations.cs b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Bgra32.PixelOperations.cs
index 1a62b0809c..0d77f8566f 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Bgra32.PixelOperations.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Bgra32.PixelOperations.cs
@@ -13,12 +13,5 @@ public partial struct Bgra32
///
/// Provides optimized overrides for bulk operations.
///
- internal partial class PixelOperations : PixelOperations
- {
- private static readonly Lazy LazyInfo =
- new Lazy(() => PixelTypeInfo.Create(PixelAlphaRepresentation.Unassociated), true);
-
- ///
- public override PixelTypeInfo GetPixelTypeInfo() => LazyInfo.Value;
- }
+ internal partial class PixelOperations : PixelOperations;
}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Bgra4444.PixelOperations.cs b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Bgra4444.PixelOperations.cs
index 8ffdaf6cb5..5f516f0945 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Bgra4444.PixelOperations.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Bgra4444.PixelOperations.cs
@@ -13,12 +13,5 @@ public partial struct Bgra4444
///
/// Provides optimized overrides for bulk operations.
///
- internal class PixelOperations : PixelOperations
- {
- private static readonly Lazy LazyInfo =
- new Lazy(() => PixelTypeInfo.Create(PixelAlphaRepresentation.Unassociated), true);
-
- ///
- public override PixelTypeInfo GetPixelTypeInfo() => LazyInfo.Value;
- }
+ internal class PixelOperations : PixelOperations;
}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Bgra5551.PixelOperations.cs b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Bgra5551.PixelOperations.cs
index 97f5d805e6..ea11e53095 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Bgra5551.PixelOperations.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Bgra5551.PixelOperations.cs
@@ -13,12 +13,5 @@ public partial struct Bgra5551
///
/// Provides optimized overrides for bulk operations.
///
- internal partial class PixelOperations : PixelOperations
- {
- private static readonly Lazy LazyInfo =
- new Lazy(() => PixelTypeInfo.Create(PixelAlphaRepresentation.Unassociated), true);
-
- ///
- public override PixelTypeInfo GetPixelTypeInfo() => LazyInfo.Value;
- }
+ internal partial class PixelOperations : PixelOperations;
}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Byte4.PixelOperations.cs b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Byte4.PixelOperations.cs
index f6e0b833c2..0946dd4c78 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Byte4.PixelOperations.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Byte4.PixelOperations.cs
@@ -13,12 +13,5 @@ public partial struct Byte4
///
/// Provides optimized overrides for bulk operations.
///
- internal class PixelOperations : PixelOperations
- {
- private static readonly Lazy LazyInfo =
- new Lazy(() => PixelTypeInfo.Create(PixelAlphaRepresentation.Unassociated), true);
-
- ///
- public override PixelTypeInfo GetPixelTypeInfo() => LazyInfo.Value;
- }
+ internal class PixelOperations : PixelOperations;
}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/HalfSingle.PixelOperations.cs b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/HalfSingle.PixelOperations.cs
index c8c4110c73..8343b4b3c4 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/HalfSingle.PixelOperations.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/HalfSingle.PixelOperations.cs
@@ -13,12 +13,5 @@ public partial struct HalfSingle
///
/// Provides optimized overrides for bulk operations.
///
- internal class PixelOperations : PixelOperations
- {
- private static readonly Lazy LazyInfo =
- new Lazy(() => PixelTypeInfo.Create(PixelAlphaRepresentation.None), true);
-
- ///
- public override PixelTypeInfo GetPixelTypeInfo() => LazyInfo.Value;
- }
+ internal class PixelOperations : PixelOperations;
}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/HalfVector2.PixelOperations.cs b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/HalfVector2.PixelOperations.cs
index bdf58145fd..9a2bdd2603 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/HalfVector2.PixelOperations.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/HalfVector2.PixelOperations.cs
@@ -13,12 +13,5 @@ public partial struct HalfVector2
///
/// Provides optimized overrides for bulk operations.
///
- internal class PixelOperations : PixelOperations
- {
- private static readonly Lazy LazyInfo =
- new Lazy(() => PixelTypeInfo.Create(PixelAlphaRepresentation.None), true);
-
- ///
- public override PixelTypeInfo GetPixelTypeInfo() => LazyInfo.Value;
- }
+ internal class PixelOperations : PixelOperations;
}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/HalfVector4.PixelOperations.cs b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/HalfVector4.PixelOperations.cs
index c3fe598045..0590b43c8e 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/HalfVector4.PixelOperations.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/HalfVector4.PixelOperations.cs
@@ -13,12 +13,5 @@ public partial struct HalfVector4
///
/// Provides optimized overrides for bulk operations.
///
- internal class PixelOperations : PixelOperations
- {
- private static readonly Lazy LazyInfo =
- new Lazy(() => PixelTypeInfo.Create(PixelAlphaRepresentation.Unassociated), true);
-
- ///
- public override PixelTypeInfo GetPixelTypeInfo() => LazyInfo.Value;
- }
+ internal class PixelOperations : PixelOperations;
}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/L16.PixelOperations.cs b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/L16.PixelOperations.cs
index 7495cee53d..fc7a81ae20 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/L16.PixelOperations.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/L16.PixelOperations.cs
@@ -13,12 +13,5 @@ public partial struct L16
///
/// Provides optimized overrides for bulk operations.
///
- internal partial class PixelOperations : PixelOperations
- {
- private static readonly Lazy LazyInfo =
- new Lazy(() => PixelTypeInfo.Create(PixelAlphaRepresentation.None), true);
-
- ///
- public override PixelTypeInfo GetPixelTypeInfo() => LazyInfo.Value;
- }
+ internal partial class PixelOperations : PixelOperations;
}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/L8.PixelOperations.cs b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/L8.PixelOperations.cs
index 5dd98c3a66..c97af4e347 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/L8.PixelOperations.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/L8.PixelOperations.cs
@@ -13,12 +13,5 @@ public partial struct L8
///
/// Provides optimized overrides for bulk operations.
///
- internal partial class PixelOperations : PixelOperations
- {
- private static readonly Lazy LazyInfo =
- new Lazy(() => PixelTypeInfo.Create(PixelAlphaRepresentation.None), true);
-
- ///
- public override PixelTypeInfo GetPixelTypeInfo() => LazyInfo.Value;
- }
+ internal partial class PixelOperations : PixelOperations;
}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/La16.PixelOperations.cs b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/La16.PixelOperations.cs
index d9bda3e0fc..9be38ac4e0 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/La16.PixelOperations.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/La16.PixelOperations.cs
@@ -13,12 +13,5 @@ public partial struct La16
///
/// Provides optimized overrides for bulk operations.
///
- internal partial class PixelOperations : PixelOperations
- {
- private static readonly Lazy LazyInfo =
- new Lazy(() => PixelTypeInfo.Create(PixelAlphaRepresentation.Unassociated), true);
-
- ///
- public override PixelTypeInfo GetPixelTypeInfo() => LazyInfo.Value;
- }
+ internal partial class PixelOperations : PixelOperations;
}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/La32.PixelOperations.cs b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/La32.PixelOperations.cs
index 1fb5adfc8f..824618c658 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/La32.PixelOperations.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/La32.PixelOperations.cs
@@ -13,12 +13,5 @@ public partial struct La32
///
/// Provides optimized overrides for bulk operations.
///
- internal partial class PixelOperations : PixelOperations
- {
- private static readonly Lazy LazyInfo =
- new Lazy(() => PixelTypeInfo.Create(PixelAlphaRepresentation.Unassociated), true);
-
- ///
- public override PixelTypeInfo GetPixelTypeInfo() => LazyInfo.Value;
- }
+ internal partial class PixelOperations : PixelOperations;
}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/NormalizedByte2.PixelOperations.cs b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/NormalizedByte2.PixelOperations.cs
index 7176295869..848d0d6f3a 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/NormalizedByte2.PixelOperations.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/NormalizedByte2.PixelOperations.cs
@@ -13,12 +13,5 @@ public partial struct NormalizedByte2
///
/// Provides optimized overrides for bulk operations.
///
- internal class PixelOperations : PixelOperations
- {
- private static readonly Lazy LazyInfo =
- new Lazy(() => PixelTypeInfo.Create(PixelAlphaRepresentation.None), true);
-
- ///
- public override PixelTypeInfo GetPixelTypeInfo() => LazyInfo.Value;
- }
+ internal class PixelOperations : PixelOperations;
}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/NormalizedByte4.PixelOperations.cs b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/NormalizedByte4.PixelOperations.cs
index 9bb48f5924..79319070dc 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/NormalizedByte4.PixelOperations.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/NormalizedByte4.PixelOperations.cs
@@ -13,12 +13,5 @@ public partial struct NormalizedByte4
///
/// Provides optimized overrides for bulk operations.
///
- internal class PixelOperations : PixelOperations
- {
- private static readonly Lazy LazyInfo =
- new Lazy(() => PixelTypeInfo.Create(PixelAlphaRepresentation.Unassociated), true);
-
- ///
- public override PixelTypeInfo GetPixelTypeInfo() => LazyInfo.Value;
- }
+ internal class PixelOperations : PixelOperations;
}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/NormalizedShort2.PixelOperations.cs b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/NormalizedShort2.PixelOperations.cs
index 3913f64bb5..0b5f23bc58 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/NormalizedShort2.PixelOperations.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/NormalizedShort2.PixelOperations.cs
@@ -13,12 +13,5 @@ public partial struct NormalizedShort2
///
/// Provides optimized overrides for bulk operations.
///
- internal class PixelOperations : PixelOperations
- {
- private static readonly Lazy LazyInfo =
- new Lazy(() => PixelTypeInfo.Create(PixelAlphaRepresentation.None), true);
-
- ///
- public override PixelTypeInfo GetPixelTypeInfo() => LazyInfo.Value;
- }
+ internal class PixelOperations : PixelOperations;
}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/NormalizedShort4.PixelOperations.cs b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/NormalizedShort4.PixelOperations.cs
index 6334f4e7e4..21634a2b34 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/NormalizedShort4.PixelOperations.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/NormalizedShort4.PixelOperations.cs
@@ -13,12 +13,5 @@ public partial struct NormalizedShort4
///
/// Provides optimized overrides for bulk operations.
///
- internal class PixelOperations : PixelOperations
- {
- private static readonly Lazy LazyInfo =
- new Lazy(() => PixelTypeInfo.Create(PixelAlphaRepresentation.Unassociated), true);
-
- ///
- public override PixelTypeInfo GetPixelTypeInfo() => LazyInfo.Value;
- }
+ internal class PixelOperations : PixelOperations;
}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Rg32.PixelOperations.cs b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Rg32.PixelOperations.cs
index a5b803f768..e0e117727d 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Rg32.PixelOperations.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Rg32.PixelOperations.cs
@@ -13,12 +13,5 @@ public partial struct Rg32
///
/// Provides optimized overrides for bulk operations.
///
- internal class PixelOperations : PixelOperations
- {
- private static readonly Lazy LazyInfo =
- new Lazy(() => PixelTypeInfo.Create(PixelAlphaRepresentation.None), true);
-
- ///
- public override PixelTypeInfo GetPixelTypeInfo() => LazyInfo.Value;
- }
+ internal class PixelOperations : PixelOperations;
}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Rgb24.PixelOperations.cs b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Rgb24.PixelOperations.cs
index 5473a602f9..f88640d9ee 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Rgb24.PixelOperations.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Rgb24.PixelOperations.cs
@@ -15,11 +15,6 @@ public partial struct Rgb24
///
internal partial class PixelOperations : PixelOperations
{
- private static readonly Lazy LazyInfo =
- new(() => PixelTypeInfo.Create(PixelAlphaRepresentation.None), true);
-
- ///
- public override PixelTypeInfo GetPixelTypeInfo() => LazyInfo.Value;
///
internal override void PackFromRgbPlanes(
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Rgb48.PixelOperations.cs b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Rgb48.PixelOperations.cs
index 56a052a7dd..26f216ae23 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Rgb48.PixelOperations.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Rgb48.PixelOperations.cs
@@ -13,12 +13,5 @@ public partial struct Rgb48
///
/// Provides optimized overrides for bulk operations.
///
- internal partial class PixelOperations : PixelOperations
- {
- private static readonly Lazy LazyInfo =
- new Lazy(() => PixelTypeInfo.Create(PixelAlphaRepresentation.None), true);
-
- ///
- public override PixelTypeInfo GetPixelTypeInfo() => LazyInfo.Value;
- }
+ internal partial class PixelOperations : PixelOperations;
}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Rgba1010102.PixelOperations.cs b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Rgba1010102.PixelOperations.cs
index f550396275..80c54ac2bb 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Rgba1010102.PixelOperations.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Rgba1010102.PixelOperations.cs
@@ -13,12 +13,5 @@ public partial struct Rgba1010102
///
/// Provides optimized overrides for bulk operations.
///
- internal class PixelOperations : PixelOperations
- {
- private static readonly Lazy LazyInfo =
- new Lazy(() => PixelTypeInfo.Create(PixelAlphaRepresentation.Unassociated), true);
-
- ///
- public override PixelTypeInfo GetPixelTypeInfo() => LazyInfo.Value;
- }
+ internal class PixelOperations : PixelOperations;
}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Rgba32.PixelOperations.cs b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Rgba32.PixelOperations.cs
index a4887b393c..36b9f85f77 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Rgba32.PixelOperations.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Rgba32.PixelOperations.cs
@@ -18,12 +18,6 @@ public partial struct Rgba32
///
internal partial class PixelOperations : PixelOperations
{
- private static readonly Lazy LazyInfo =
- new(() => PixelTypeInfo.Create(PixelAlphaRepresentation.Unassociated), true);
-
- ///
- public override PixelTypeInfo GetPixelTypeInfo() => LazyInfo.Value;
-
///
public override void ToVector4(
Configuration configuration,
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Rgba64.PixelOperations.cs b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Rgba64.PixelOperations.cs
index 56bbc6b25b..f796098c6d 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Rgba64.PixelOperations.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Rgba64.PixelOperations.cs
@@ -13,12 +13,5 @@ public partial struct Rgba64
///
/// Provides optimized overrides for bulk operations.
///
- internal partial class PixelOperations : PixelOperations
- {
- private static readonly Lazy LazyInfo =
- new Lazy(() => PixelTypeInfo.Create(PixelAlphaRepresentation.Unassociated), true);
-
- ///
- public override PixelTypeInfo GetPixelTypeInfo() => LazyInfo.Value;
- }
+ internal partial class PixelOperations : PixelOperations;
}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/RgbaVector.PixelOperations.cs b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/RgbaVector.PixelOperations.cs
index a3833583fc..c18c3d8687 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/RgbaVector.PixelOperations.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/RgbaVector.PixelOperations.cs
@@ -19,12 +19,6 @@ public partial struct RgbaVector
///
internal class PixelOperations : PixelOperations
{
- private static readonly Lazy LazyInfo =
- new(() => PixelTypeInfo.Create(PixelAlphaRepresentation.Unassociated), true);
-
- ///
- public override PixelTypeInfo GetPixelTypeInfo() => LazyInfo.Value;
-
///
public override void From(
Configuration configuration,
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Short2.PixelOperations.cs b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Short2.PixelOperations.cs
index 435a521ba7..737cd52993 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Short2.PixelOperations.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Short2.PixelOperations.cs
@@ -13,12 +13,5 @@ public partial struct Short2
///
/// Provides optimized overrides for bulk operations.
///
- internal class PixelOperations : PixelOperations
- {
- private static readonly Lazy LazyInfo =
- new Lazy(() => PixelTypeInfo.Create(PixelAlphaRepresentation.None), true);
-
- ///
- public override PixelTypeInfo GetPixelTypeInfo() => LazyInfo.Value;
- }
+ internal class PixelOperations : PixelOperations;
}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Short4.PixelOperations.cs b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Short4.PixelOperations.cs
index 546da9c57d..ab069c0ab1 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Short4.PixelOperations.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/PixelOperations/Short4.PixelOperations.cs
@@ -13,12 +13,5 @@ public partial struct Short4
///
/// Provides optimized overrides for bulk operations.
///
- internal class PixelOperations : PixelOperations
- {
- private static readonly Lazy LazyInfo =
- new Lazy(() => PixelTypeInfo.Create(PixelAlphaRepresentation.Unassociated), true);
-
- ///
- public override PixelTypeInfo GetPixelTypeInfo() => LazyInfo.Value;
- }
+ internal class PixelOperations : PixelOperations;
}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Rg32.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Rg32.cs
index 0a13a15eda..b824acad4d 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Rg32.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Rg32.cs
@@ -3,6 +3,7 @@
using System.Numerics;
using System.Runtime.CompilerServices;
+using SixLabors.ImageSharp.Formats;
namespace SixLabors.ImageSharp.PixelFormats;
@@ -57,6 +58,8 @@ public partial struct Rg32 : IPixel, IPackedVector
[MethodImpl(InliningOptions.ShortMethod)]
public static bool operator !=(Rg32 left, Rg32 right) => !left.Equals(right);
+ public static PixelTypeInfo GetPixelTypeInfo() => PixelTypeInfo.Create(2, PixelAlphaRepresentation.None);
+
///
public readonly PixelOperations CreatePixelOperations() => new PixelOperations();
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Rgb24.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Rgb24.cs
index 105618cd96..609ad21b7b 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Rgb24.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Rgb24.cs
@@ -4,6 +4,7 @@
using System.Numerics;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
+using SixLabors.ImageSharp.Formats;
namespace SixLabors.ImageSharp.PixelFormats;
@@ -106,6 +107,8 @@ public partial struct Rgb24 : IPixel
[MethodImpl(InliningOptions.ShortMethod)]
public static bool operator !=(Rgb24 left, Rgb24 right) => !left.Equals(right);
+ public static PixelTypeInfo GetPixelTypeInfo() => PixelTypeInfo.Create(3, PixelAlphaRepresentation.None);
+
///
public readonly PixelOperations CreatePixelOperations() => new PixelOperations();
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Rgb48.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Rgb48.cs
index 6bf25717ce..e89393c528 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Rgb48.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Rgb48.cs
@@ -4,6 +4,7 @@
using System.Numerics;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
+using SixLabors.ImageSharp.Formats;
namespace SixLabors.ImageSharp.PixelFormats;
@@ -69,6 +70,8 @@ public partial struct Rgb48 : IPixel
[MethodImpl(InliningOptions.ShortMethod)]
public static bool operator !=(Rgb48 left, Rgb48 right) => !left.Equals(right);
+ public static PixelTypeInfo GetPixelTypeInfo() => PixelTypeInfo.Create(3, PixelAlphaRepresentation.None);
+
///
public readonly PixelOperations CreatePixelOperations() => new PixelOperations();
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Rgba1010102.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Rgba1010102.cs
index 7bac1d9208..734b1e2293 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Rgba1010102.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Rgba1010102.cs
@@ -3,6 +3,7 @@
using System.Numerics;
using System.Runtime.CompilerServices;
+using SixLabors.ImageSharp.Formats;
namespace SixLabors.ImageSharp.PixelFormats;
@@ -60,6 +61,8 @@ public partial struct Rgba1010102 : IPixel, IPackedVector
[MethodImpl(InliningOptions.ShortMethod)]
public static bool operator !=(Rgba1010102 left, Rgba1010102 right) => !left.Equals(right);
+ public static PixelTypeInfo GetPixelTypeInfo() => PixelTypeInfo.Create(4, PixelAlphaRepresentation.Unassociated);
+
///
public readonly PixelOperations CreatePixelOperations() => new PixelOperations();
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Rgba32.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Rgba32.cs
index 75fe8f3f4e..e1be7d0ecb 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Rgba32.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Rgba32.cs
@@ -6,6 +6,7 @@ using System.Globalization;
using System.Numerics;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
+using SixLabors.ImageSharp.Formats;
namespace SixLabors.ImageSharp.PixelFormats;
@@ -286,6 +287,8 @@ public partial struct Rgba32 : IPixel, IPackedVector
return true;
}
+ public static PixelTypeInfo GetPixelTypeInfo() => PixelTypeInfo.Create(4, PixelAlphaRepresentation.Unassociated);
+
///
public readonly PixelOperations CreatePixelOperations() => new PixelOperations();
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Rgba64.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Rgba64.cs
index 75235c9007..95b1f242f9 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Rgba64.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Rgba64.cs
@@ -4,6 +4,7 @@
using System.Numerics;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
+using SixLabors.ImageSharp.Formats;
namespace SixLabors.ImageSharp.PixelFormats;
@@ -206,6 +207,8 @@ public partial struct Rgba64 : IPixel, IPackedVector
[MethodImpl(InliningOptions.ShortMethod)]
public static bool operator !=(Rgba64 left, Rgba64 right) => left.PackedValue != right.PackedValue;
+ public static PixelTypeInfo GetPixelTypeInfo() => PixelTypeInfo.Create(4, PixelAlphaRepresentation.Unassociated);
+
///
public readonly PixelOperations CreatePixelOperations() => new PixelOperations();
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/RgbaVector.cs b/src/ImageSharp/PixelFormats/PixelImplementations/RgbaVector.cs
index 899987b712..c914ca9e31 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/RgbaVector.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/RgbaVector.cs
@@ -5,6 +5,7 @@ using System.Globalization;
using System.Numerics;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
+using SixLabors.ImageSharp.Formats;
namespace SixLabors.ImageSharp.PixelFormats;
@@ -96,6 +97,8 @@ public partial struct RgbaVector : IPixel
///
public static RgbaVector FromHex(string hex) => Color.ParseHex(hex).ToPixel();
+ public static PixelTypeInfo GetPixelTypeInfo() => PixelTypeInfo.Create(4, PixelAlphaRepresentation.Unassociated);
+
///
public readonly PixelOperations CreatePixelOperations() => new PixelOperations();
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Short2.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Short2.cs
index 832e8c770f..b5155c1faa 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Short2.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Short2.cs
@@ -3,6 +3,7 @@
using System.Numerics;
using System.Runtime.CompilerServices;
+using SixLabors.ImageSharp.Formats;
namespace SixLabors.ImageSharp.PixelFormats;
@@ -64,6 +65,8 @@ public partial struct Short2 : IPixel, IPackedVector
[MethodImpl(InliningOptions.ShortMethod)]
public static bool operator !=(Short2 left, Short2 right) => !left.Equals(right);
+ public static PixelTypeInfo GetPixelTypeInfo() => PixelTypeInfo.Create(2, PixelAlphaRepresentation.None);
+
///
public readonly PixelOperations CreatePixelOperations() => new PixelOperations();
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Short4.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Short4.cs
index c4dc324a13..3318889998 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Short4.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Short4.cs
@@ -3,6 +3,7 @@
using System.Numerics;
using System.Runtime.CompilerServices;
+using SixLabors.ImageSharp.Formats;
namespace SixLabors.ImageSharp.PixelFormats;
@@ -66,6 +67,8 @@ public partial struct Short4 : IPixel, IPackedVector
[MethodImpl(InliningOptions.ShortMethod)]
public static bool operator !=(Short4 left, Short4 right) => !left.Equals(right);
+ public static PixelTypeInfo GetPixelTypeInfo() => PixelTypeInfo.Create(4, PixelAlphaRepresentation.Unassociated);
+
///
public readonly PixelOperations CreatePixelOperations() => new PixelOperations();
diff --git a/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.cs b/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.cs
index beebec8283..ee675e2e29 100644
--- a/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.cs
+++ b/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.cs
@@ -18,7 +18,6 @@ namespace SixLabors.ImageSharp.PixelFormats;
public partial class PixelOperations
where TPixel : unmanaged, IPixel
{
- private static readonly Lazy LazyInfo = new(() => PixelTypeInfo.Create(), true);
private static readonly Lazy> LazyInstance = new(() => default(TPixel).CreatePixelOperations(), true);
///
@@ -32,7 +31,7 @@ public partial class PixelOperations
/// Gets the pixel type info for the given .
///
/// The .
- public virtual PixelTypeInfo GetPixelTypeInfo() => LazyInfo.Value;
+ public static PixelTypeInfo GetPixelTypeInfo() => TPixel.GetPixelTypeInfo();
///
/// Bulk version of converting 'sourceVectors.Length' pixels into 'destinationColors'.
diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor{TPixel}.cs
index 98c2523fae..38aab02839 100644
--- a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor{TPixel}.cs
+++ b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor{TPixel}.cs
@@ -197,7 +197,7 @@ internal class ResizeProcessor : TransformProcessor, IResampling
bool compand,
bool premultiplyAlpha)
{
- PixelAlphaRepresentation? alphaRepresentation = PixelOperations.Instance.GetPixelTypeInfo()?.AlphaRepresentation;
+ PixelAlphaRepresentation? alphaRepresentation = PixelOperations.GetPixelTypeInfo().AlphaRepresentation;
// Premultiply only if alpha representation is unknown or Unassociated:
bool needsPremultiplication = alphaRepresentation == null || alphaRepresentation.Value == PixelAlphaRepresentation.Unassociated;
diff --git a/tests/ImageSharp.Tests/Formats/Bmp/BmpDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Bmp/BmpDecoderTests.cs
index e76f21d0e9..78a7b2c11c 100644
--- a/tests/ImageSharp.Tests/Formats/Bmp/BmpDecoderTests.cs
+++ b/tests/ImageSharp.Tests/Formats/Bmp/BmpDecoderTests.cs
@@ -477,7 +477,7 @@ public class BmpDecoderTests
using MemoryStream stream = new(testFile.Bytes, false);
ImageInfo imageInfo = Image.Identify(stream);
Assert.NotNull(imageInfo);
- Assert.Equal(expectedPixelSize, imageInfo.PixelType?.BitsPerPixel);
+ Assert.Equal(expectedPixelSize, imageInfo.PixelType.BitsPerPixel);
}
[Theory]
diff --git a/tests/ImageSharp.Tests/Formats/Tiff/BigTiffDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Tiff/BigTiffDecoderTests.cs
index 8e90b1dd57..72f53cab78 100644
--- a/tests/ImageSharp.Tests/Formats/Tiff/BigTiffDecoderTests.cs
+++ b/tests/ImageSharp.Tests/Formats/Tiff/BigTiffDecoderTests.cs
@@ -65,7 +65,7 @@ public class BigTiffDecoderTests : TiffDecoderBaseTester
using MemoryStream stream = new(testFile.Bytes, false);
ImageInfo info = Image.Identify(stream);
- Assert.Equal(expectedPixelSize, info.PixelType?.BitsPerPixel);
+ Assert.Equal(expectedPixelSize, info.PixelType.BitsPerPixel);
Assert.Equal(expectedWidth, info.Width);
Assert.Equal(expectedHeight, info.Height);
Assert.NotNull(info.Metadata);
diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/Generated/PixelOperationsTests.Specialized.Generated.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/Generated/PixelOperationsTests.Specialized.Generated.cs
index 5ba5c1bedf..b372829270 100644
--- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/Generated/PixelOperationsTests.Specialized.Generated.cs
+++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/Generated/PixelOperationsTests.Specialized.Generated.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Six Labors.
+// Copyright (c) Six Labors.
// Licensed under the Six Labors Split License.
//
@@ -12,7 +12,7 @@ namespace SixLabors.ImageSharp.Tests.PixelFormats.PixelOperations;
public partial class PixelOperationsTests
{
-
+
public partial class A8_OperationsTests : PixelOperationsTests
{
public A8_OperationsTests(ITestOutputHelper output)
@@ -20,19 +20,14 @@ public partial class PixelOperationsTests
{
}
- protected override PixelOperations Operations => A8.PixelOperations.Instance;
-
- [Fact]
- public void IsSpecialImplementation() => Assert.IsType(PixelOperations.Instance);
-
[Fact]
public void PixelTypeInfoHasCorrectAlphaRepresentation()
{
- var alphaRepresentation = this.Operations.GetPixelTypeInfo().AlphaRepresentation;
+ var alphaRepresentation = A8.GetPixelTypeInfo().AlphaRepresentation;
Assert.Equal(PixelAlphaRepresentation.Unassociated, alphaRepresentation);
}
}
-
+
public partial class Argb32_OperationsTests : PixelOperationsTests
{
public Argb32_OperationsTests(ITestOutputHelper output)
@@ -40,19 +35,14 @@ public partial class PixelOperationsTests
{
}
- protected override PixelOperations Operations => Argb32.PixelOperations.Instance;
-
- [Fact]
- public void IsSpecialImplementation() => Assert.IsType(PixelOperations.Instance);
-
[Fact]
public void PixelTypeInfoHasCorrectAlphaRepresentation()
{
- var alphaRepresentation = this.Operations.GetPixelTypeInfo().AlphaRepresentation;
+ var alphaRepresentation = Argb32.GetPixelTypeInfo().AlphaRepresentation;
Assert.Equal(PixelAlphaRepresentation.Unassociated, alphaRepresentation);
}
}
-
+
public partial class Abgr32_OperationsTests : PixelOperationsTests
{
public Abgr32_OperationsTests(ITestOutputHelper output)
@@ -60,19 +50,14 @@ public partial class PixelOperationsTests
{
}
- protected override PixelOperations Operations => Abgr32.PixelOperations.Instance;
-
- [Fact]
- public void IsSpecialImplementation() => Assert.IsType(PixelOperations.Instance);
-
[Fact]
public void PixelTypeInfoHasCorrectAlphaRepresentation()
{
- var alphaRepresentation = this.Operations.GetPixelTypeInfo().AlphaRepresentation;
+ var alphaRepresentation = Abgr32.GetPixelTypeInfo().AlphaRepresentation;
Assert.Equal(PixelAlphaRepresentation.Unassociated, alphaRepresentation);
}
}
-
+
public partial class Bgr24_OperationsTests : PixelOperationsTests
{
public Bgr24_OperationsTests(ITestOutputHelper output)
@@ -80,19 +65,14 @@ public partial class PixelOperationsTests
{
}
- protected override PixelOperations Operations => Bgr24.PixelOperations.Instance;
-
- [Fact]
- public void IsSpecialImplementation() => Assert.IsType(PixelOperations.Instance);
-
[Fact]
public void PixelTypeInfoHasCorrectAlphaRepresentation()
{
- var alphaRepresentation = this.Operations.GetPixelTypeInfo().AlphaRepresentation;
+ var alphaRepresentation = Bgr24.GetPixelTypeInfo().AlphaRepresentation;
Assert.Equal(PixelAlphaRepresentation.None, alphaRepresentation);
}
}
-
+
public partial class Bgr565_OperationsTests : PixelOperationsTests
{
public Bgr565_OperationsTests(ITestOutputHelper output)
@@ -100,19 +80,14 @@ public partial class PixelOperationsTests
{
}
- protected override PixelOperations Operations => Bgr565.PixelOperations.Instance;
-
- [Fact]
- public void IsSpecialImplementation() => Assert.IsType(PixelOperations.Instance);
-
[Fact]
public void PixelTypeInfoHasCorrectAlphaRepresentation()
{
- var alphaRepresentation = this.Operations.GetPixelTypeInfo().AlphaRepresentation;
+ var alphaRepresentation = Bgr565.GetPixelTypeInfo().AlphaRepresentation;
Assert.Equal(PixelAlphaRepresentation.None, alphaRepresentation);
}
}
-
+
public partial class Bgra32_OperationsTests : PixelOperationsTests
{
public Bgra32_OperationsTests(ITestOutputHelper output)
@@ -120,19 +95,14 @@ public partial class PixelOperationsTests
{
}
- protected override PixelOperations Operations => Bgra32.PixelOperations.Instance;
-
- [Fact]
- public void IsSpecialImplementation() => Assert.IsType(PixelOperations.Instance);
-
[Fact]
public void PixelTypeInfoHasCorrectAlphaRepresentation()
{
- var alphaRepresentation = this.Operations.GetPixelTypeInfo().AlphaRepresentation;
+ var alphaRepresentation = Bgra32.GetPixelTypeInfo().AlphaRepresentation;
Assert.Equal(PixelAlphaRepresentation.Unassociated, alphaRepresentation);
}
}
-
+
public partial class Bgra4444_OperationsTests : PixelOperationsTests
{
public Bgra4444_OperationsTests(ITestOutputHelper output)
@@ -140,19 +110,14 @@ public partial class PixelOperationsTests
{
}
- protected override PixelOperations Operations => Bgra4444.PixelOperations.Instance;
-
- [Fact]
- public void IsSpecialImplementation() => Assert.IsType(PixelOperations.Instance);
-
[Fact]
public void PixelTypeInfoHasCorrectAlphaRepresentation()
{
- var alphaRepresentation = this.Operations.GetPixelTypeInfo().AlphaRepresentation;
+ var alphaRepresentation = Bgra4444.GetPixelTypeInfo().AlphaRepresentation;
Assert.Equal(PixelAlphaRepresentation.Unassociated, alphaRepresentation);
}
}
-
+
public partial class Bgra5551_OperationsTests : PixelOperationsTests
{
public Bgra5551_OperationsTests(ITestOutputHelper output)
@@ -160,19 +125,14 @@ public partial class PixelOperationsTests
{
}
- protected override PixelOperations Operations => Bgra5551.PixelOperations.Instance;
-
- [Fact]
- public void IsSpecialImplementation() => Assert.IsType(PixelOperations.Instance);
-
[Fact]
public void PixelTypeInfoHasCorrectAlphaRepresentation()
{
- var alphaRepresentation = this.Operations.GetPixelTypeInfo().AlphaRepresentation;
+ var alphaRepresentation = Bgra5551.GetPixelTypeInfo().AlphaRepresentation;
Assert.Equal(PixelAlphaRepresentation.Unassociated, alphaRepresentation);
}
}
-
+
public partial class Byte4_OperationsTests : PixelOperationsTests
{
public Byte4_OperationsTests(ITestOutputHelper output)
@@ -180,19 +140,14 @@ public partial class PixelOperationsTests
{
}
- protected override PixelOperations Operations => Byte4.PixelOperations.Instance;
-
- [Fact]
- public void IsSpecialImplementation() => Assert.IsType(PixelOperations.Instance);
-
[Fact]
public void PixelTypeInfoHasCorrectAlphaRepresentation()
{
- var alphaRepresentation = this.Operations.GetPixelTypeInfo().AlphaRepresentation;
+ var alphaRepresentation = Byte4.GetPixelTypeInfo().AlphaRepresentation;
Assert.Equal(PixelAlphaRepresentation.Unassociated, alphaRepresentation);
}
}
-
+
public partial class HalfSingle_OperationsTests : PixelOperationsTests
{
public HalfSingle_OperationsTests(ITestOutputHelper output)
@@ -200,19 +155,14 @@ public partial class PixelOperationsTests
{
}
- protected override PixelOperations Operations => HalfSingle.PixelOperations.Instance;
-
- [Fact]
- public void IsSpecialImplementation() => Assert.IsType(PixelOperations.Instance);
-
[Fact]
public void PixelTypeInfoHasCorrectAlphaRepresentation()
{
- var alphaRepresentation = this.Operations.GetPixelTypeInfo().AlphaRepresentation;
+ var alphaRepresentation = HalfSingle.GetPixelTypeInfo().AlphaRepresentation;
Assert.Equal(PixelAlphaRepresentation.None, alphaRepresentation);
}
}
-
+
public partial class HalfVector2_OperationsTests : PixelOperationsTests
{
public HalfVector2_OperationsTests(ITestOutputHelper output)
@@ -220,19 +170,14 @@ public partial class PixelOperationsTests
{
}
- protected override PixelOperations Operations => HalfVector2.PixelOperations.Instance;
-
- [Fact]
- public void IsSpecialImplementation() => Assert.IsType(PixelOperations.Instance);
-
[Fact]
public void PixelTypeInfoHasCorrectAlphaRepresentation()
{
- var alphaRepresentation = this.Operations.GetPixelTypeInfo().AlphaRepresentation;
+ var alphaRepresentation = HalfVector2.GetPixelTypeInfo().AlphaRepresentation;
Assert.Equal(PixelAlphaRepresentation.None, alphaRepresentation);
}
}
-
+
public partial class HalfVector4_OperationsTests : PixelOperationsTests
{
public HalfVector4_OperationsTests(ITestOutputHelper output)
@@ -240,19 +185,14 @@ public partial class PixelOperationsTests
{
}
- protected override PixelOperations Operations => HalfVector4.PixelOperations.Instance;
-
- [Fact]
- public void IsSpecialImplementation() => Assert.IsType(PixelOperations.Instance);
-
[Fact]
public void PixelTypeInfoHasCorrectAlphaRepresentation()
{
- var alphaRepresentation = this.Operations.GetPixelTypeInfo().AlphaRepresentation;
+ var alphaRepresentation = HalfVector4.GetPixelTypeInfo().AlphaRepresentation;
Assert.Equal(PixelAlphaRepresentation.Unassociated, alphaRepresentation);
}
}
-
+
public partial class L16_OperationsTests : PixelOperationsTests
{
public L16_OperationsTests(ITestOutputHelper output)
@@ -260,19 +200,14 @@ public partial class PixelOperationsTests
{
}
- protected override PixelOperations Operations => L16.PixelOperations.Instance;
-
- [Fact]
- public void IsSpecialImplementation() => Assert.IsType(PixelOperations.Instance);
-
[Fact]
public void PixelTypeInfoHasCorrectAlphaRepresentation()
{
- var alphaRepresentation = this.Operations.GetPixelTypeInfo().AlphaRepresentation;
+ var alphaRepresentation = L16.GetPixelTypeInfo().AlphaRepresentation;
Assert.Equal(PixelAlphaRepresentation.None, alphaRepresentation);
}
}
-
+
public partial class L8_OperationsTests : PixelOperationsTests
{
public L8_OperationsTests(ITestOutputHelper output)
@@ -280,19 +215,14 @@ public partial class PixelOperationsTests
{
}
- protected override PixelOperations Operations => L8.PixelOperations.Instance;
-
- [Fact]
- public void IsSpecialImplementation() => Assert.IsType(PixelOperations.Instance);
-
[Fact]
public void PixelTypeInfoHasCorrectAlphaRepresentation()
{
- var alphaRepresentation = this.Operations.GetPixelTypeInfo().AlphaRepresentation;
+ var alphaRepresentation = L8.GetPixelTypeInfo().AlphaRepresentation;
Assert.Equal(PixelAlphaRepresentation.None, alphaRepresentation);
}
}
-
+
public partial class La16_OperationsTests : PixelOperationsTests
{
public La16_OperationsTests(ITestOutputHelper output)
@@ -300,19 +230,14 @@ public partial class PixelOperationsTests
{
}
- protected override PixelOperations Operations => La16.PixelOperations.Instance;
-
- [Fact]
- public void IsSpecialImplementation() => Assert.IsType(PixelOperations.Instance);
-
[Fact]
public void PixelTypeInfoHasCorrectAlphaRepresentation()
{
- var alphaRepresentation = this.Operations.GetPixelTypeInfo().AlphaRepresentation;
+ var alphaRepresentation = La16.GetPixelTypeInfo().AlphaRepresentation;
Assert.Equal(PixelAlphaRepresentation.Unassociated, alphaRepresentation);
}
}
-
+
public partial class La32_OperationsTests : PixelOperationsTests
{
public La32_OperationsTests(ITestOutputHelper output)
@@ -320,19 +245,14 @@ public partial class PixelOperationsTests
{
}
- protected override PixelOperations Operations => La32.PixelOperations.Instance;
-
- [Fact]
- public void IsSpecialImplementation() => Assert.IsType(PixelOperations.Instance);
-
[Fact]
public void PixelTypeInfoHasCorrectAlphaRepresentation()
{
- var alphaRepresentation = this.Operations.GetPixelTypeInfo().AlphaRepresentation;
+ var alphaRepresentation = La32.GetPixelTypeInfo().AlphaRepresentation;
Assert.Equal(PixelAlphaRepresentation.Unassociated, alphaRepresentation);
}
}
-
+
public partial class NormalizedByte2_OperationsTests : PixelOperationsTests
{
public NormalizedByte2_OperationsTests(ITestOutputHelper output)
@@ -340,19 +260,14 @@ public partial class PixelOperationsTests
{
}
- protected override PixelOperations Operations => NormalizedByte2.PixelOperations.Instance;
-
- [Fact]
- public void IsSpecialImplementation() => Assert.IsType(PixelOperations.Instance);
-
[Fact]
public void PixelTypeInfoHasCorrectAlphaRepresentation()
{
- var alphaRepresentation = this.Operations.GetPixelTypeInfo().AlphaRepresentation;
+ var alphaRepresentation = NormalizedByte2.GetPixelTypeInfo().AlphaRepresentation;
Assert.Equal(PixelAlphaRepresentation.None, alphaRepresentation);
}
}
-
+
public partial class NormalizedByte4_OperationsTests : PixelOperationsTests
{
public NormalizedByte4_OperationsTests(ITestOutputHelper output)
@@ -360,19 +275,14 @@ public partial class PixelOperationsTests
{
}
- protected override PixelOperations Operations => NormalizedByte4.PixelOperations.Instance;
-
- [Fact]
- public void IsSpecialImplementation() => Assert.IsType(PixelOperations.Instance);
-
[Fact]
public void PixelTypeInfoHasCorrectAlphaRepresentation()
{
- var alphaRepresentation = this.Operations.GetPixelTypeInfo().AlphaRepresentation;
+ var alphaRepresentation = NormalizedByte4.GetPixelTypeInfo().AlphaRepresentation;
Assert.Equal(PixelAlphaRepresentation.Unassociated, alphaRepresentation);
}
}
-
+
public partial class NormalizedShort2_OperationsTests : PixelOperationsTests
{
public NormalizedShort2_OperationsTests(ITestOutputHelper output)
@@ -380,19 +290,14 @@ public partial class PixelOperationsTests
{
}
- protected override PixelOperations Operations => NormalizedShort2.PixelOperations.Instance;
-
- [Fact]
- public void IsSpecialImplementation() => Assert.IsType(PixelOperations.Instance);
-
[Fact]
public void PixelTypeInfoHasCorrectAlphaRepresentation()
{
- var alphaRepresentation = this.Operations.GetPixelTypeInfo().AlphaRepresentation;
+ var alphaRepresentation = NormalizedShort2.GetPixelTypeInfo().AlphaRepresentation;
Assert.Equal(PixelAlphaRepresentation.None, alphaRepresentation);
}
}
-
+
public partial class NormalizedShort4_OperationsTests : PixelOperationsTests
{
public NormalizedShort4_OperationsTests(ITestOutputHelper output)
@@ -400,19 +305,14 @@ public partial class PixelOperationsTests
{
}
- protected override PixelOperations Operations => NormalizedShort4.PixelOperations.Instance;
-
- [Fact]
- public void IsSpecialImplementation() => Assert.IsType(PixelOperations.Instance);
-
[Fact]
public void PixelTypeInfoHasCorrectAlphaRepresentation()
{
- var alphaRepresentation = this.Operations.GetPixelTypeInfo().AlphaRepresentation;
+ var alphaRepresentation = NormalizedShort4.GetPixelTypeInfo().AlphaRepresentation;
Assert.Equal(PixelAlphaRepresentation.Unassociated, alphaRepresentation);
}
}
-
+
public partial class Rg32_OperationsTests : PixelOperationsTests
{
public Rg32_OperationsTests(ITestOutputHelper output)
@@ -420,19 +320,14 @@ public partial class PixelOperationsTests
{
}
- protected override PixelOperations Operations => Rg32.PixelOperations.Instance;
-
- [Fact]
- public void IsSpecialImplementation() => Assert.IsType(PixelOperations.Instance);
-
[Fact]
public void PixelTypeInfoHasCorrectAlphaRepresentation()
{
- var alphaRepresentation = this.Operations.GetPixelTypeInfo().AlphaRepresentation;
+ var alphaRepresentation = Rg32.GetPixelTypeInfo().AlphaRepresentation;
Assert.Equal(PixelAlphaRepresentation.None, alphaRepresentation);
}
}
-
+
public partial class Rgb24_OperationsTests : PixelOperationsTests
{
public Rgb24_OperationsTests(ITestOutputHelper output)
@@ -440,19 +335,14 @@ public partial class PixelOperationsTests
{
}
- protected override PixelOperations Operations => Rgb24.PixelOperations.Instance;
-
- [Fact]
- public void IsSpecialImplementation() => Assert.IsType(PixelOperations.Instance);
-
[Fact]
public void PixelTypeInfoHasCorrectAlphaRepresentation()
{
- var alphaRepresentation = this.Operations.GetPixelTypeInfo().AlphaRepresentation;
+ var alphaRepresentation = Rgb24.GetPixelTypeInfo().AlphaRepresentation;
Assert.Equal(PixelAlphaRepresentation.None, alphaRepresentation);
}
}
-
+
public partial class Rgb48_OperationsTests : PixelOperationsTests
{
public Rgb48_OperationsTests(ITestOutputHelper output)
@@ -460,19 +350,14 @@ public partial class PixelOperationsTests
{
}
- protected override PixelOperations Operations => Rgb48.PixelOperations.Instance;
-
- [Fact]
- public void IsSpecialImplementation() => Assert.IsType(PixelOperations.Instance);
-
[Fact]
public void PixelTypeInfoHasCorrectAlphaRepresentation()
{
- var alphaRepresentation = this.Operations.GetPixelTypeInfo().AlphaRepresentation;
+ var alphaRepresentation = Rgb48.GetPixelTypeInfo().AlphaRepresentation;
Assert.Equal(PixelAlphaRepresentation.None, alphaRepresentation);
}
}
-
+
public partial class Rgba1010102_OperationsTests : PixelOperationsTests
{
public Rgba1010102_OperationsTests(ITestOutputHelper output)
@@ -480,19 +365,14 @@ public partial class PixelOperationsTests
{
}
- protected override PixelOperations Operations => Rgba1010102.PixelOperations.Instance;
-
- [Fact]
- public void IsSpecialImplementation() => Assert.IsType(PixelOperations.Instance);
-
[Fact]
public void PixelTypeInfoHasCorrectAlphaRepresentation()
{
- var alphaRepresentation = this.Operations.GetPixelTypeInfo().AlphaRepresentation;
+ var alphaRepresentation = Rgba1010102.GetPixelTypeInfo().AlphaRepresentation;
Assert.Equal(PixelAlphaRepresentation.Unassociated, alphaRepresentation);
}
}
-
+
public partial class Rgba32_OperationsTests : PixelOperationsTests
{
public Rgba32_OperationsTests(ITestOutputHelper output)
@@ -500,19 +380,14 @@ public partial class PixelOperationsTests
{
}
- protected override PixelOperations Operations => Rgba32.PixelOperations.Instance;
-
- [Fact]
- public void IsSpecialImplementation() => Assert.IsType(PixelOperations.Instance);
-
[Fact]
public void PixelTypeInfoHasCorrectAlphaRepresentation()
{
- var alphaRepresentation = this.Operations.GetPixelTypeInfo().AlphaRepresentation;
+ var alphaRepresentation = Rgba32.GetPixelTypeInfo().AlphaRepresentation;
Assert.Equal(PixelAlphaRepresentation.Unassociated, alphaRepresentation);
}
}
-
+
public partial class Rgba64_OperationsTests : PixelOperationsTests
{
public Rgba64_OperationsTests(ITestOutputHelper output)
@@ -520,19 +395,14 @@ public partial class PixelOperationsTests
{
}
- protected override PixelOperations Operations => Rgba64.PixelOperations.Instance;
-
- [Fact]
- public void IsSpecialImplementation() => Assert.IsType(PixelOperations.Instance);
-
[Fact]
public void PixelTypeInfoHasCorrectAlphaRepresentation()
{
- var alphaRepresentation = this.Operations.GetPixelTypeInfo().AlphaRepresentation;
+ var alphaRepresentation = Rgba64.GetPixelTypeInfo().AlphaRepresentation;
Assert.Equal(PixelAlphaRepresentation.Unassociated, alphaRepresentation);
}
}
-
+
public partial class RgbaVector_OperationsTests : PixelOperationsTests
{
public RgbaVector_OperationsTests(ITestOutputHelper output)
@@ -540,19 +410,14 @@ public partial class PixelOperationsTests
{
}
- protected override PixelOperations Operations => RgbaVector.PixelOperations.Instance;
-
- [Fact]
- public void IsSpecialImplementation() => Assert.IsType(PixelOperations.Instance);
-
[Fact]
public void PixelTypeInfoHasCorrectAlphaRepresentation()
{
- var alphaRepresentation = this.Operations.GetPixelTypeInfo().AlphaRepresentation;
+ var alphaRepresentation = RgbaVector.GetPixelTypeInfo().AlphaRepresentation;
Assert.Equal(PixelAlphaRepresentation.Unassociated, alphaRepresentation);
}
}
-
+
public partial class Short2_OperationsTests : PixelOperationsTests
{
public Short2_OperationsTests(ITestOutputHelper output)
@@ -560,19 +425,14 @@ public partial class PixelOperationsTests
{
}
- protected override PixelOperations Operations => Short2.PixelOperations.Instance;
-
- [Fact]
- public void IsSpecialImplementation() => Assert.IsType(PixelOperations.Instance);
-
[Fact]
public void PixelTypeInfoHasCorrectAlphaRepresentation()
{
- var alphaRepresentation = this.Operations.GetPixelTypeInfo().AlphaRepresentation;
+ var alphaRepresentation = Short2.GetPixelTypeInfo().AlphaRepresentation;
Assert.Equal(PixelAlphaRepresentation.None, alphaRepresentation);
}
}
-
+
public partial class Short4_OperationsTests : PixelOperationsTests
{
public Short4_OperationsTests(ITestOutputHelper output)
@@ -580,15 +440,10 @@ public partial class PixelOperationsTests
{
}
- protected override PixelOperations Operations => Short4.PixelOperations.Instance;
-
- [Fact]
- public void IsSpecialImplementation() => Assert.IsType(PixelOperations.Instance);
-
[Fact]
public void PixelTypeInfoHasCorrectAlphaRepresentation()
{
- var alphaRepresentation = this.Operations.GetPixelTypeInfo().AlphaRepresentation;
+ var alphaRepresentation = Short4.GetPixelTypeInfo().AlphaRepresentation;
Assert.Equal(PixelAlphaRepresentation.Unassociated, alphaRepresentation);
}
}
diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/Generated/_Common.ttinclude b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/Generated/_Common.ttinclude
index 0e7b1f3354..90cb3a8665 100644
--- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/Generated/_Common.ttinclude
+++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/Generated/_Common.ttinclude
@@ -70,7 +70,7 @@ using Xunit.Abstractions;
void GenerateSpecializedClass(string pixelType, string alpha)
{#>
-
+
public partial class <#=pixelType#>_OperationsTests : PixelOperationsTests<<#=pixelType#>>
{
public <#=pixelType#>_OperationsTests(ITestOutputHelper output)
@@ -78,15 +78,10 @@ using Xunit.Abstractions;
{
}
- protected override PixelOperations<<#=pixelType#>> Operations => <#=pixelType#>.PixelOperations.Instance;
-
- [Fact]
- public void IsSpecialImplementation() => Assert.IsType<<#=pixelType#>.PixelOperations>(PixelOperations<<#=pixelType#>>.Instance);
-
[Fact]
public void PixelTypeInfoHasCorrectAlphaRepresentation()
{
- var alphaRepresentation = this.Operations.GetPixelTypeInfo().AlphaRepresentation;
+ var alphaRepresentation = <#=pixelType#>.GetPixelTypeInfo().AlphaRepresentation;
Assert.Equal(<#=alpha#>, alphaRepresentation);
}
}
diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.cs
index a9b3ee9a42..8c16a72df0 100644
--- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.cs
+++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.cs
@@ -70,7 +70,7 @@ public abstract class PixelOperationsTests : MeasureFixture
protected virtual PixelOperations Operations { get; } = PixelOperations.Instance;
- protected bool HasUnassociatedAlpha => this.Operations.GetPixelTypeInfo().AlphaRepresentation == PixelAlphaRepresentation.Unassociated;
+ protected bool HasUnassociatedAlpha => TPixel.GetPixelTypeInfo().AlphaRepresentation == PixelAlphaRepresentation.Unassociated;
internal static TPixel[] CreateExpectedPixelData(Vector4[] source, RefAction vectorModifier = null)
{
@@ -105,7 +105,7 @@ public abstract class PixelOperationsTests : MeasureFixture
[Fact]
public void PixelTypeInfoHasCorrectBitsPerPixel()
{
- int bits = this.Operations.GetPixelTypeInfo().BitsPerPixel;
+ int bits = TPixel.GetPixelTypeInfo().BitsPerPixel;
Assert.Equal(Unsafe.SizeOf() * 8, bits);
}
@@ -123,7 +123,7 @@ public abstract class PixelOperationsTests : MeasureFixture
Rgba32 dest = default;
pixel.ToRgba32(ref dest);
- bool hasAlpha = this.Operations.GetPixelTypeInfo().AlphaRepresentation != PixelAlphaRepresentation.None;
+ bool hasAlpha = TPixel.GetPixelTypeInfo().AlphaRepresentation != PixelAlphaRepresentation.None;
byte expectedAlpha = hasAlpha ? Alpha : NoAlpha;
Assert.Equal(expectedAlpha, dest.A);
diff --git a/tests/ImageSharp.Tests/TestFormat.cs b/tests/ImageSharp.Tests/TestFormat.cs
index f597b708d5..465a219701 100644
--- a/tests/ImageSharp.Tests/TestFormat.cs
+++ b/tests/ImageSharp.Tests/TestFormat.cs
@@ -263,6 +263,8 @@ public class TestFormat : IImageFormatConfigurationModule, IImageFormat
public struct TestPixelForAgnosticDecode : IPixel
{
+ public static PixelTypeInfo GetPixelTypeInfo() => PixelTypeInfo.Create(2, PixelAlphaRepresentation.None);
+
public PixelOperations CreatePixelOperations() => new();
public void FromScaledVector4(Vector4 vector)
diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/BasicTestPatternProvider.cs b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/BasicTestPatternProvider.cs
index 1e3ad3a5d5..5fb3501e36 100644
--- a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/BasicTestPatternProvider.cs
+++ b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/BasicTestPatternProvider.cs
@@ -8,6 +8,11 @@ namespace SixLabors.ImageSharp.Tests;
public abstract partial class TestImageProvider : IXunitSerializable
{
+ [Obsolete("Called by the de-serializer; should only be called by deriving classes for de-serialization purposes")]
+ public TestImageProvider()
+ {
+ }
+
public virtual TPixel GetExpectedBasicTestPatternPixelAt(int x, int y)
{
throw new NotSupportedException("GetExpectedBasicTestPatternPixelAt(x,y) only works with BasicTestPattern");