diff --git a/src/ImageSharp/ImageSharp.csproj b/src/ImageSharp/ImageSharp.csproj
index 573694ac1..c59f88396 100644
--- a/src/ImageSharp/ImageSharp.csproj
+++ b/src/ImageSharp/ImageSharp.csproj
@@ -91,6 +91,16 @@
True
L16.PixelOperations.Generated.tt
+
+ True
+ True
+ La16.PixelOperations.Generated.tt
+
+
+ True
+ True
+ La32.PixelOperations.Generated.tt
+
True
True
@@ -168,6 +178,14 @@
TextTemplatingFileGenerator
L16.PixelOperations.Generated.cs
+
+ TextTemplatingFileGenerator
+ La16.PixelOperations.Generated.cs
+
+
+ TextTemplatingFileGenerator
+ La32.PixelOperations.Generated.cs
+
TextTemplatingFileGenerator
Rgb24.PixelOperations.Generated.cs
diff --git a/src/ImageSharp/PixelFormats/IPixel.cs b/src/ImageSharp/PixelFormats/IPixel.cs
index 9b954ee9b..61adedb0d 100644
--- a/src/ImageSharp/PixelFormats/IPixel.cs
+++ b/src/ImageSharp/PixelFormats/IPixel.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Six Labors and contributors.
+// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
using System;
@@ -91,6 +91,18 @@ namespace SixLabors.ImageSharp.PixelFormats
/// The value.
void FromL16(L16 source);
+ ///
+ /// Initializes the pixel instance from an value.
+ ///
+ /// The value.
+ void FromLa16(La16 source);
+
+ ///
+ /// Initializes the pixel instance from an value.
+ ///
+ /// The value.
+ void FromLa32(La32 source);
+
///
/// Initializes the pixel instance from an value.
///
@@ -121,4 +133,4 @@ namespace SixLabors.ImageSharp.PixelFormats
/// The value.
void FromRgba64(Rgba64 source);
}
-}
\ No newline at end of file
+}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/A8.cs b/src/ImageSharp/PixelFormats/PixelImplementations/A8.cs
index e88fc107c..cf55a2245 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/A8.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/A8.cs
@@ -8,7 +8,7 @@ using System.Runtime.CompilerServices;
namespace SixLabors.ImageSharp.PixelFormats
{
///
- /// Packed pixel type containing a single 8 bit normalized alpha value.
+ /// Packed pixel type containing a single 8-bit normalized alpha value.
///
/// Ranges from [0, 0, 0, 0] to [0, 0, 0, 1] in vector form.
///
@@ -99,6 +99,14 @@ namespace SixLabors.ImageSharp.PixelFormats
[MethodImpl(InliningOptions.ShortMethod)]
public void FromL16(L16 source) => this.PackedValue = byte.MaxValue;
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa16(La16 source) => this.PackedValue = source.A;
+
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa32(La32 source) => this.PackedValue = ImageMaths.DownScaleFrom16BitTo8Bit(source.A);
+
///
[MethodImpl(InliningOptions.ShortMethod)]
public void FromRgb24(Rgb24 source) => this.PackedValue = byte.MaxValue;
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Argb32.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Argb32.cs
index d0feb6915..4dc5c9fb5 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Argb32.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Argb32.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Six Labors and contributors.
+// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
using System.Numerics;
@@ -248,6 +248,27 @@ namespace SixLabors.ImageSharp.PixelFormats
this.A = byte.MaxValue;
}
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa16(La16 source)
+ {
+ this.R = source.L;
+ this.G = source.L;
+ this.B = source.L;
+ this.A = source.A;
+ }
+
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa32(La32 source)
+ {
+ byte rgb = ImageMaths.DownScaleFrom16BitTo8Bit(source.L);
+ this.R = rgb;
+ this.G = rgb;
+ this.B = rgb;
+ this.A = ImageMaths.DownScaleFrom16BitTo8Bit(source.A);
+ }
+
///
[MethodImpl(InliningOptions.ShortMethod)]
public void FromRgb24(Rgb24 source)
@@ -357,4 +378,4 @@ namespace SixLabors.ImageSharp.PixelFormats
this.A = (byte)vector.W;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Bgr24.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Bgr24.cs
index a965364f1..1cd0b8027 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Bgr24.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Bgr24.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Six Labors and contributors.
+// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
using System;
@@ -157,6 +157,25 @@ namespace SixLabors.ImageSharp.PixelFormats
this.B = rgb;
}
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa16(La16 source)
+ {
+ this.R = source.L;
+ this.G = source.L;
+ this.B = source.L;
+ }
+
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa32(La32 source)
+ {
+ byte rgb = ImageMaths.DownScaleFrom16BitTo8Bit(source.L);
+ this.R = rgb;
+ this.G = rgb;
+ this.B = rgb;
+ }
+
///
[MethodImpl(InliningOptions.ShortMethod)]
public void FromRgb24(Rgb24 source)
@@ -212,4 +231,4 @@ namespace SixLabors.ImageSharp.PixelFormats
[MethodImpl(InliningOptions.ShortMethod)]
public override int GetHashCode() => HashCode.Combine(this.R, this.B, this.G);
}
-}
\ No newline at end of file
+}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Bgr565.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Bgr565.cs
index 104d24bdf..4a7bbded9 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Bgr565.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Bgr565.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Six Labors and contributors.
+// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
using System;
@@ -107,6 +107,14 @@ namespace SixLabors.ImageSharp.PixelFormats
[MethodImpl(InliningOptions.ShortMethod)]
public void FromL16(L16 source) => this.FromScaledVector4(source.ToScaledVector4());
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa16(La16 source) => this.FromScaledVector4(source.ToScaledVector4());
+
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa32(La32 source) => this.FromScaledVector4(source.ToScaledVector4());
+
///
[MethodImpl(InliningOptions.ShortMethod)]
public void FromRgb24(Rgb24 source) => this.FromScaledVector4(source.ToScaledVector4());
@@ -172,4 +180,4 @@ namespace SixLabors.ImageSharp.PixelFormats
| ((int)Math.Round(vector.Z * 31F) & 0x1F));
}
}
-}
\ No newline at end of file
+}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Bgra32.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Bgra32.cs
index 63f08b2b7..e4ae35c26 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Bgra32.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Bgra32.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Six Labors and contributors.
+// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
using System.Numerics;
@@ -204,6 +204,27 @@ namespace SixLabors.ImageSharp.PixelFormats
this.A = byte.MaxValue;
}
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa16(La16 source)
+ {
+ this.R = source.L;
+ this.G = source.L;
+ this.B = source.L;
+ this.A = source.A;
+ }
+
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa32(La32 source)
+ {
+ byte rgb = ImageMaths.DownScaleFrom16BitTo8Bit(source.L);
+ this.R = rgb;
+ this.G = rgb;
+ this.B = rgb;
+ this.A = ImageMaths.DownScaleFrom16BitTo8Bit(source.A);
+ }
+
///
[MethodImpl(InliningOptions.ShortMethod)]
public void FromRgba32(Rgba32 source)
@@ -283,4 +304,4 @@ namespace SixLabors.ImageSharp.PixelFormats
this.A = (byte)vector.W;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Bgra4444.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Bgra4444.cs
index ec27219f9..f4479603f 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Bgra4444.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Bgra4444.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Six Labors and contributors.
+// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
using System;
@@ -110,6 +110,14 @@ namespace SixLabors.ImageSharp.PixelFormats
[MethodImpl(InliningOptions.ShortMethod)]
public void FromL16(L16 source) => this.FromScaledVector4(source.ToScaledVector4());
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa16(La16 source) => this.FromScaledVector4(source.ToScaledVector4());
+
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa32(La32 source) => this.FromScaledVector4(source.ToScaledVector4());
+
///
[MethodImpl(InliningOptions.ShortMethod)]
public void FromRgb24(Rgb24 source) => this.FromScaledVector4(source.ToScaledVector4());
@@ -161,4 +169,4 @@ namespace SixLabors.ImageSharp.PixelFormats
| ((int)Math.Round(vector.Z * 15F) & 0x0F));
}
}
-}
\ No newline at end of file
+}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Bgra5551.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Bgra5551.cs
index 799a89ba5..b3d7015cf 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Bgra5551.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Bgra5551.cs
@@ -111,6 +111,14 @@ namespace SixLabors.ImageSharp.PixelFormats
[MethodImpl(InliningOptions.ShortMethod)]
public void FromL16(L16 source) => this.FromScaledVector4(source.ToScaledVector4());
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa16(La16 source) => this.FromScaledVector4(source.ToScaledVector4());
+
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa32(La32 source) => this.FromScaledVector4(source.ToScaledVector4());
+
///
[MethodImpl(InliningOptions.ShortMethod)]
public void FromRgb24(Rgb24 source) => this.FromScaledVector4(source.ToScaledVector4());
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Byte4.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Byte4.cs
index f6ac50481..6583670f1 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Byte4.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Byte4.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Six Labors and contributors.
+// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
using System;
@@ -107,6 +107,14 @@ namespace SixLabors.ImageSharp.PixelFormats
[MethodImpl(InliningOptions.ShortMethod)]
public void FromL16(L16 source) => this.FromScaledVector4(source.ToScaledVector4());
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa16(La16 source) => this.FromScaledVector4(source.ToScaledVector4());
+
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa32(La32 source) => this.FromScaledVector4(source.ToScaledVector4());
+
///
[MethodImpl(InliningOptions.ShortMethod)]
public void FromRgb24(Rgb24 source) => this.FromScaledVector4(source.ToScaledVector4());
@@ -173,4 +181,4 @@ namespace SixLabors.ImageSharp.PixelFormats
return byte4 | byte3 | byte2 | byte1;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Argb32.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Argb32.PixelOperations.Generated.cs
index 5d9afd7c0..6a599985f 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Argb32.PixelOperations.Generated.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Argb32.PixelOperations.Generated.cs
@@ -169,6 +169,42 @@ namespace SixLabors.ImageSharp.PixelFormats
}
}
+ ///
+ internal override void ToLa16(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref Argb32 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref La16 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref Argb32 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref La16 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromArgb32(sp);
+ }
+ }
+
+ ///
+ internal override void ToLa32(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref Argb32 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref La32 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref Argb32 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref La32 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromArgb32(sp);
+ }
+ }
+
///
internal override void ToRgb24(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
{
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgr24.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgr24.PixelOperations.Generated.cs
index 7a1f882fc..16ba364b8 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgr24.PixelOperations.Generated.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgr24.PixelOperations.Generated.cs
@@ -126,6 +126,42 @@ namespace SixLabors.ImageSharp.PixelFormats
}
}
+ ///
+ internal override void ToLa16(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref Bgr24 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref La16 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref Bgr24 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref La16 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromBgr24(sp);
+ }
+ }
+
+ ///
+ internal override void ToLa32(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref Bgr24 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref La32 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref Bgr24 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref La32 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromBgr24(sp);
+ }
+ }
+
///
internal override void ToRgb24(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
{
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgra32.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgra32.PixelOperations.Generated.cs
index 9bd70a88c..54d946880 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgra32.PixelOperations.Generated.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgra32.PixelOperations.Generated.cs
@@ -169,6 +169,42 @@ namespace SixLabors.ImageSharp.PixelFormats
}
}
+ ///
+ internal override void ToLa16(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref Bgra32 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref La16 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref Bgra32 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref La16 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromBgra32(sp);
+ }
+ }
+
+ ///
+ internal override void ToLa32(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref Bgra32 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref La32 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref Bgra32 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref La32 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromBgra32(sp);
+ }
+ }
+
///
internal override void ToRgb24(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
{
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgra5551.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgra5551.PixelOperations.Generated.cs
index 655d3f4b4..10abec075 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgra5551.PixelOperations.Generated.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgra5551.PixelOperations.Generated.cs
@@ -133,6 +133,42 @@ namespace SixLabors.ImageSharp.PixelFormats
}
}
+ ///
+ internal override void ToLa16(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref Bgra5551 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref La16 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref Bgra5551 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref La16 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromBgra5551(sp);
+ }
+ }
+
+ ///
+ internal override void ToLa32(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref Bgra5551 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref La32 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref Bgra5551 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref La32 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromBgra5551(sp);
+ }
+ }
+
///
internal override void ToRgb24(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
{
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/L16.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/L16.PixelOperations.Generated.cs
index 446f79f71..aaff5a23b 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/L16.PixelOperations.Generated.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/L16.PixelOperations.Generated.cs
@@ -114,6 +114,42 @@ namespace SixLabors.ImageSharp.PixelFormats
}
}
+ ///
+ internal override void ToLa16(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref L16 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref La16 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref L16 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref La16 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromL16(sp);
+ }
+ }
+
+ ///
+ internal override void ToLa32(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref L16 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref La32 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref L16 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref La32 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromL16(sp);
+ }
+ }
+
///
internal override void ToRgb24(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
{
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/L8.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/L8.PixelOperations.Generated.cs
index 030ed8ca9..30a338d48 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/L8.PixelOperations.Generated.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/L8.PixelOperations.Generated.cs
@@ -114,6 +114,42 @@ namespace SixLabors.ImageSharp.PixelFormats
}
}
+ ///
+ internal override void ToLa16(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref L8 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref La16 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref L8 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref La16 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromL8(sp);
+ }
+ }
+
+ ///
+ internal override void ToLa32(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref L8 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref La32 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref L8 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref La32 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromL8(sp);
+ }
+ }
+
///
internal override void ToRgb24(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
{
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/La16.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/La16.PixelOperations.Generated.cs
new file mode 100644
index 000000000..ee0641aa8
--- /dev/null
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/La16.PixelOperations.Generated.cs
@@ -0,0 +1,252 @@
+// Copyright (c) Six Labors and contributors.
+// Licensed under the Apache License, Version 2.0.
+
+//
+
+using SixLabors.ImageSharp.PixelFormats.Utils;
+using System;
+using System.Buffers;
+using System.Numerics;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+
+namespace SixLabors.ImageSharp.PixelFormats
+{
+ ///
+ /// Provides optimized overrides for bulk operations.
+ ///
+ public partial struct La16
+ {
+ ///
+ /// Provides optimized overrides for bulk operations.
+ ///
+ internal class PixelOperations : PixelOperations
+ {
+ ///
+ internal override void FromLa16(Configuration configuration, ReadOnlySpan source, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(source, destPixels, nameof(destPixels));
+
+ source.CopyTo(destPixels);
+ }
+
+ ///
+ internal override void ToLa16(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ sourcePixels.CopyTo(destPixels);
+ }
+
+
+ ///
+ internal override void ToArgb32(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref La16 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref Argb32 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref La16 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref Argb32 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromLa16(sp);
+ }
+ }
+
+ ///
+ internal override void ToBgr24(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref La16 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref Bgr24 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref La16 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref Bgr24 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromLa16(sp);
+ }
+ }
+
+ ///
+ internal override void ToBgra32(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref La16 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref Bgra32 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref La16 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref Bgra32 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromLa16(sp);
+ }
+ }
+
+ ///
+ internal override void ToL8(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref La16 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref L8 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref La16 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref L8 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromLa16(sp);
+ }
+ }
+
+ ///
+ internal override void ToL16(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref La16 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref L16 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref La16 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref L16 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromLa16(sp);
+ }
+ }
+
+ ///
+ internal override void ToLa32(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref La16 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref La32 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref La16 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref La32 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromLa16(sp);
+ }
+ }
+
+ ///
+ internal override void ToRgb24(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref La16 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref Rgb24 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref La16 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref Rgb24 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromLa16(sp);
+ }
+ }
+
+ ///
+ internal override void ToRgba32(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref La16 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref Rgba32 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref La16 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref Rgba32 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromLa16(sp);
+ }
+ }
+
+ ///
+ internal override void ToRgb48(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref La16 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref Rgb48 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref La16 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref Rgb48 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromLa16(sp);
+ }
+ }
+
+ ///
+ internal override void ToRgba64(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref La16 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref Rgba64 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref La16 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref Rgba64 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromLa16(sp);
+ }
+ }
+
+ ///
+ internal override void ToBgra5551(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref La16 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref Bgra5551 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref La16 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref Bgra5551 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromLa16(sp);
+ }
+ }
+ ///
+ internal override void From(
+ Configuration configuration,
+ ReadOnlySpan sourcePixels,
+ Span destinationPixels)
+ {
+ PixelOperations.Instance.ToLa16(configuration, sourcePixels, destinationPixels);
+ }
+ }
+ }
+}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/La16.PixelOperations.Generated.tt b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/La16.PixelOperations.Generated.tt
new file mode 100644
index 000000000..5d6661631
--- /dev/null
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/La16.PixelOperations.Generated.tt
@@ -0,0 +1,19 @@
+<#@include file="_Common.ttinclude" #>
+<#@ output extension=".cs" #>
+
+namespace SixLabors.ImageSharp.PixelFormats
+{
+ ///
+ /// Provides optimized overrides for bulk operations.
+ ///
+ public partial struct La16
+ {
+ ///
+ /// Provides optimized overrides for bulk operations.
+ ///
+ internal class PixelOperations : PixelOperations
+ {
+ <# GenerateAllDefaultConversionMethods("La16"); #>
+ }
+ }
+}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/La32.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/La32.PixelOperations.Generated.cs
new file mode 100644
index 000000000..a95fce7aa
--- /dev/null
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/La32.PixelOperations.Generated.cs
@@ -0,0 +1,252 @@
+// Copyright (c) Six Labors and contributors.
+// Licensed under the Apache License, Version 2.0.
+
+//
+
+using SixLabors.ImageSharp.PixelFormats.Utils;
+using System;
+using System.Buffers;
+using System.Numerics;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+
+namespace SixLabors.ImageSharp.PixelFormats
+{
+ ///
+ /// Provides optimized overrides for bulk operations.
+ ///
+ public partial struct La32
+ {
+ ///
+ /// Provides optimized overrides for bulk operations.
+ ///
+ internal class PixelOperations : PixelOperations
+ {
+ ///
+ internal override void FromLa32(Configuration configuration, ReadOnlySpan source, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(source, destPixels, nameof(destPixels));
+
+ source.CopyTo(destPixels);
+ }
+
+ ///
+ internal override void ToLa32(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ sourcePixels.CopyTo(destPixels);
+ }
+
+
+ ///
+ internal override void ToArgb32(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref La32 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref Argb32 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref La32 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref Argb32 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromLa32(sp);
+ }
+ }
+
+ ///
+ internal override void ToBgr24(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref La32 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref Bgr24 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref La32 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref Bgr24 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromLa32(sp);
+ }
+ }
+
+ ///
+ internal override void ToBgra32(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref La32 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref Bgra32 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref La32 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref Bgra32 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromLa32(sp);
+ }
+ }
+
+ ///
+ internal override void ToL8(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref La32 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref L8 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref La32 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref L8 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromLa32(sp);
+ }
+ }
+
+ ///
+ internal override void ToL16(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref La32 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref L16 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref La32 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref L16 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromLa32(sp);
+ }
+ }
+
+ ///
+ internal override void ToLa16(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref La32 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref La16 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref La32 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref La16 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromLa32(sp);
+ }
+ }
+
+ ///
+ internal override void ToRgb24(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref La32 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref Rgb24 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref La32 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref Rgb24 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromLa32(sp);
+ }
+ }
+
+ ///
+ internal override void ToRgba32(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref La32 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref Rgba32 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref La32 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref Rgba32 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromLa32(sp);
+ }
+ }
+
+ ///
+ internal override void ToRgb48(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref La32 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref Rgb48 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref La32 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref Rgb48 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromLa32(sp);
+ }
+ }
+
+ ///
+ internal override void ToRgba64(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref La32 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref Rgba64 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref La32 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref Rgba64 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromLa32(sp);
+ }
+ }
+
+ ///
+ internal override void ToBgra5551(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref La32 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref Bgra5551 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref La32 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref Bgra5551 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromLa32(sp);
+ }
+ }
+ ///
+ internal override void From(
+ Configuration configuration,
+ ReadOnlySpan sourcePixels,
+ Span destinationPixels)
+ {
+ PixelOperations.Instance.ToLa32(configuration, sourcePixels, destinationPixels);
+ }
+ }
+ }
+}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/La32.PixelOperations.Generated.tt b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/La32.PixelOperations.Generated.tt
new file mode 100644
index 000000000..e2fb4867a
--- /dev/null
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/La32.PixelOperations.Generated.tt
@@ -0,0 +1,19 @@
+<#@include file="_Common.ttinclude" #>
+<#@ output extension=".cs" #>
+
+namespace SixLabors.ImageSharp.PixelFormats
+{
+ ///
+ /// Provides optimized overrides for bulk operations.
+ ///
+ public partial struct La32
+ {
+ ///
+ /// Provides optimized overrides for bulk operations.
+ ///
+ internal class PixelOperations : PixelOperations
+ {
+ <# GenerateAllDefaultConversionMethods("La32"); #>
+ }
+ }
+}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgb24.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgb24.PixelOperations.Generated.cs
index d9b1ffca8..a6730428c 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgb24.PixelOperations.Generated.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgb24.PixelOperations.Generated.cs
@@ -143,6 +143,42 @@ namespace SixLabors.ImageSharp.PixelFormats
}
}
+ ///
+ internal override void ToLa16(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref Rgb24 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref La16 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref Rgb24 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref La16 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromRgb24(sp);
+ }
+ }
+
+ ///
+ internal override void ToLa32(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref Rgb24 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref La32 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref Rgb24 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref La32 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromRgb24(sp);
+ }
+ }
+
///
internal override void ToRgba32(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
{
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgb48.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgb48.PixelOperations.Generated.cs
index e6fc71be5..a80636b2c 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgb48.PixelOperations.Generated.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgb48.PixelOperations.Generated.cs
@@ -132,6 +132,42 @@ namespace SixLabors.ImageSharp.PixelFormats
}
}
+ ///
+ internal override void ToLa16(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref Rgb48 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref La16 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref Rgb48 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref La16 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromRgb48(sp);
+ }
+ }
+
+ ///
+ internal override void ToLa32(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref Rgb48 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref La32 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref Rgb48 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref La32 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromRgb48(sp);
+ }
+ }
+
///
internal override void ToRgb24(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
{
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgba32.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgba32.PixelOperations.Generated.cs
index 6381623a4..c9f025335 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgba32.PixelOperations.Generated.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgba32.PixelOperations.Generated.cs
@@ -158,6 +158,42 @@ namespace SixLabors.ImageSharp.PixelFormats
}
}
+ ///
+ internal override void ToLa16(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref Rgba32 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref La16 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref Rgba32 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref La16 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromRgba32(sp);
+ }
+ }
+
+ ///
+ internal override void ToLa32(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref Rgba32 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref La32 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref Rgba32 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref La32 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromRgba32(sp);
+ }
+ }
+
///
internal override void ToRgb24(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
{
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgba64.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgba64.PixelOperations.Generated.cs
index 762a74c89..f1545d6fc 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgba64.PixelOperations.Generated.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgba64.PixelOperations.Generated.cs
@@ -132,6 +132,42 @@ namespace SixLabors.ImageSharp.PixelFormats
}
}
+ ///
+ internal override void ToLa16(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref Rgba64 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref La16 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref Rgba64 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref La16 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromRgba64(sp);
+ }
+ }
+
+ ///
+ internal override void ToLa32(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.NotNull(configuration, nameof(configuration));
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref Rgba64 sourceRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref La32 destRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref Rgba64 sp = ref Unsafe.Add(ref sourceRef, i);
+ ref La32 dp = ref Unsafe.Add(ref destRef, i);
+
+ dp.FromRgba64(sp);
+ }
+ }
+
///
internal override void ToRgb24(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
{
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/_Common.ttinclude b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/_Common.ttinclude
index 85e23c4b8..8aeef3a66 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/_Common.ttinclude
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/_Common.ttinclude
@@ -15,7 +15,7 @@ using System.Numerics;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
<#+
- static readonly string[] CommonPixelTypes = { "Argb32", "Bgr24", "Bgra32", "L8", "L16", "Rgb24", "Rgba32", "Rgb48", "Rgba64", "Bgra5551" };
+ static readonly string[] CommonPixelTypes = { "Argb32", "Bgr24", "Bgra32", "L8", "L16", "La16", "La32", "Rgb24", "Rgba32", "Rgb48", "Rgba64", "Bgra5551" };
static readonly string[] Optimized32BitTypes = { "Rgba32", "Argb32", "Bgra32" };
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/HalfSingle.cs b/src/ImageSharp/PixelFormats/PixelImplementations/HalfSingle.cs
index 5f3314654..4d6c4985a 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/HalfSingle.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/HalfSingle.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Six Labors and contributors.
+// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
using System;
@@ -100,6 +100,14 @@ namespace SixLabors.ImageSharp.PixelFormats
[MethodImpl(InliningOptions.ShortMethod)]
public void FromL16(L16 source) => this.FromScaledVector4(source.ToScaledVector4());
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa16(La16 source) => this.FromScaledVector4(source.ToScaledVector4());
+
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa32(La32 source) => this.FromScaledVector4(source.ToScaledVector4());
+
///
[MethodImpl(InliningOptions.ShortMethod)]
public void FromRgb24(Rgb24 source) => this.FromScaledVector4(source.ToScaledVector4());
@@ -144,4 +152,4 @@ namespace SixLabors.ImageSharp.PixelFormats
[MethodImpl(InliningOptions.ShortMethod)]
public override int GetHashCode() => this.PackedValue.GetHashCode();
}
-}
\ No newline at end of file
+}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/HalfVector2.cs b/src/ImageSharp/PixelFormats/PixelImplementations/HalfVector2.cs
index 47d7c8ea5..300458cb2 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/HalfVector2.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/HalfVector2.cs
@@ -111,6 +111,14 @@ namespace SixLabors.ImageSharp.PixelFormats
[MethodImpl(InliningOptions.ShortMethod)]
public void FromL16(L16 source) => this.FromScaledVector4(source.ToScaledVector4());
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa16(La16 source) => this.FromScaledVector4(source.ToScaledVector4());
+
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa32(La32 source) => this.FromScaledVector4(source.ToScaledVector4());
+
///
[MethodImpl(InliningOptions.ShortMethod)]
public void FromRgb24(Rgb24 source) => this.FromScaledVector4(source.ToScaledVector4());
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/HalfVector4.cs b/src/ImageSharp/PixelFormats/PixelImplementations/HalfVector4.cs
index 7b19c5ec4..5ccc09e9f 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/HalfVector4.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/HalfVector4.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Six Labors and contributors.
+// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
using System;
@@ -119,6 +119,14 @@ namespace SixLabors.ImageSharp.PixelFormats
[MethodImpl(InliningOptions.ShortMethod)]
public void FromL16(L16 source) => this.FromScaledVector4(source.ToScaledVector4());
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa16(La16 source) => this.FromScaledVector4(source.ToScaledVector4());
+
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa32(La32 source) => this.FromScaledVector4(source.ToScaledVector4());
+
///
[MethodImpl(InliningOptions.ShortMethod)]
public void FromRgb24(Rgb24 source) => this.FromScaledVector4(source.ToScaledVector4());
@@ -175,4 +183,4 @@ namespace SixLabors.ImageSharp.PixelFormats
return num4 | num3 | num2 | num1;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/L16.cs b/src/ImageSharp/PixelFormats/PixelImplementations/L16.cs
index ad459abe5..cbe34745c 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/L16.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/L16.cs
@@ -110,7 +110,15 @@ namespace SixLabors.ImageSharp.PixelFormats
///
[MethodImpl(InliningOptions.ShortMethod)]
- public void FromL16(L16 source) => this.PackedValue = source.PackedValue;
+ public void FromL16(L16 source) => this = source;
+
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa16(La16 source) => this.PackedValue = ImageMaths.UpscaleFrom8BitTo16Bit(source.L);
+
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa32(La32 source) => this.PackedValue = source.L;
///
[MethodImpl(InliningOptions.ShortMethod)]
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/L8.cs b/src/ImageSharp/PixelFormats/PixelImplementations/L8.cs
index 4b0a6b28e..b4911ec1c 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/L8.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/L8.cs
@@ -89,12 +89,20 @@ namespace SixLabors.ImageSharp.PixelFormats
///
[MethodImpl(InliningOptions.ShortMethod)]
- public void FromL8(L8 source) => this.PackedValue = source.PackedValue;
+ public void FromL8(L8 source) => this = source;
///
[MethodImpl(InliningOptions.ShortMethod)]
public void FromL16(L16 source) => this.PackedValue = ImageMaths.DownScaleFrom16BitTo8Bit(source.PackedValue);
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa16(La16 source) => this.PackedValue = source.L;
+
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa32(La32 source) => this.PackedValue = ImageMaths.DownScaleFrom16BitTo8Bit(source.L);
+
///
[MethodImpl(InliningOptions.ShortMethod)]
public void FromRgb24(Rgb24 source) => this.PackedValue = ImageMaths.Get8BitBT709Luminance(source.R, source.G, source.B);
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/La16.cs b/src/ImageSharp/PixelFormats/PixelImplementations/La16.cs
index 5a4e1dbcb..2ab5da158 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/La16.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/La16.cs
@@ -14,7 +14,7 @@ namespace SixLabors.ImageSharp.PixelFormats
///
///
[StructLayout(LayoutKind.Explicit)]
- public struct La16 : IPixel, IPackedVector
+ public partial struct La16 : IPixel, IPackedVector
{
private static readonly Vector4 MaxBytes = new Vector4(255F);
private static readonly Vector4 Half = new Vector4(0.5F);
@@ -73,7 +73,7 @@ namespace SixLabors.ImageSharp.PixelFormats
public static bool operator !=(La16 left, La16 right) => !left.Equals(right);
///
- public PixelOperations CreatePixelOperations() => new PixelOperations();
+ public PixelOperations CreatePixelOperations() => new PixelOperations();
///
[MethodImpl(InliningOptions.ShortMethod)]
@@ -133,6 +133,18 @@ namespace SixLabors.ImageSharp.PixelFormats
this.A = byte.MaxValue;
}
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa16(La16 source) => this = source;
+
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa32(La32 source)
+ {
+ this.L = ImageMaths.DownScaleFrom16BitTo8Bit(source.L);
+ this.A = ImageMaths.DownScaleFrom16BitTo8Bit(source.A);
+ }
+
///
[MethodImpl(InliningOptions.ShortMethod)]
public void FromRgb24(Rgb24 source)
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/La32.cs b/src/ImageSharp/PixelFormats/PixelImplementations/La32.cs
index 467170d31..035d23854 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/La32.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/La32.cs
@@ -14,7 +14,7 @@ namespace SixLabors.ImageSharp.PixelFormats
///
///
[StructLayout(LayoutKind.Explicit)]
- public struct La32 : IPixel, IPackedVector
+ public partial struct La32 : IPixel, IPackedVector
{
private const float Max = ushort.MaxValue;
@@ -72,7 +72,7 @@ namespace SixLabors.ImageSharp.PixelFormats
public static bool operator !=(La32 left, La32 right) => !left.Equals(right);
///
- public PixelOperations CreatePixelOperations() => new PixelOperations();
+ public PixelOperations CreatePixelOperations() => new PixelOperations();
///
[MethodImpl(InliningOptions.ShortMethod)]
@@ -144,6 +144,18 @@ namespace SixLabors.ImageSharp.PixelFormats
this.A = ushort.MaxValue;
}
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa16(La16 source)
+ {
+ this.L = ImageMaths.UpscaleFrom8BitTo16Bit(source.L);
+ this.A = ImageMaths.UpscaleFrom8BitTo16Bit(source.A);
+ }
+
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa32(La32 source) => this = source;
+
///
[MethodImpl(InliningOptions.ShortMethod)]
public void FromRgb24(Rgb24 source)
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedByte2.cs b/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedByte2.cs
index a9128b463..d6362dacc 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedByte2.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedByte2.cs
@@ -121,6 +121,14 @@ namespace SixLabors.ImageSharp.PixelFormats
[MethodImpl(InliningOptions.ShortMethod)]
public void FromL16(L16 source) => this.FromScaledVector4(source.ToScaledVector4());
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa16(La16 source) => this.FromScaledVector4(source.ToScaledVector4());
+
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa32(La32 source) => this.FromScaledVector4(source.ToScaledVector4());
+
///
[MethodImpl(InliningOptions.ShortMethod)]
public void FromRgb24(Rgb24 source) => this.FromScaledVector4(source.ToScaledVector4());
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedByte4.cs b/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedByte4.cs
index d9af3002d..f6c5d2580 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedByte4.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedByte4.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Six Labors and contributors.
+// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
using System;
@@ -122,6 +122,14 @@ namespace SixLabors.ImageSharp.PixelFormats
[MethodImpl(InliningOptions.ShortMethod)]
public void FromL16(L16 source) => this.FromScaledVector4(source.ToScaledVector4());
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa16(La16 source) => this.FromScaledVector4(source.ToScaledVector4());
+
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa32(La32 source) => this.FromScaledVector4(source.ToScaledVector4());
+
///
[MethodImpl(InliningOptions.ShortMethod)]
public void FromRgb24(Rgb24 source) => this.FromScaledVector4(source.ToScaledVector4());
@@ -176,4 +184,4 @@ namespace SixLabors.ImageSharp.PixelFormats
return byte4 | byte3 | byte2 | byte1;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedShort2.cs b/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedShort2.cs
index 045443afc..989c03e22 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedShort2.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedShort2.cs
@@ -117,6 +117,14 @@ namespace SixLabors.ImageSharp.PixelFormats
[MethodImpl(InliningOptions.ShortMethod)]
public void FromL16(L16 source) => this.FromScaledVector4(source.ToScaledVector4());
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa16(La16 source) => this.FromScaledVector4(source.ToScaledVector4());
+
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa32(La32 source) => this.FromScaledVector4(source.ToScaledVector4());
+
///
[MethodImpl(InliningOptions.ShortMethod)]
public void FromRgb24(Rgb24 source) => this.FromScaledVector4(source.ToScaledVector4());
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedShort4.cs b/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedShort4.cs
index afdc3cc4c..ed849a6c7 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedShort4.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedShort4.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Six Labors and contributors.
+// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
using System;
@@ -124,6 +124,14 @@ namespace SixLabors.ImageSharp.PixelFormats
[MethodImpl(InliningOptions.ShortMethod)]
public void FromL16(L16 source) => this.FromScaledVector4(source.ToScaledVector4());
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa16(La16 source) => this.FromScaledVector4(source.ToScaledVector4());
+
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa32(La32 source) => this.FromScaledVector4(source.ToScaledVector4());
+
///
[MethodImpl(InliningOptions.ShortMethod)]
public void FromRgb24(Rgb24 source) => this.FromScaledVector4(source.ToScaledVector4());
@@ -180,4 +188,4 @@ namespace SixLabors.ImageSharp.PixelFormats
return word4 | word3 | word2 | word1;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Rg32.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Rg32.cs
index 915e48351..a7385d5af 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Rg32.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Rg32.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Six Labors and contributors.
+// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
using System;
@@ -105,6 +105,14 @@ namespace SixLabors.ImageSharp.PixelFormats
[MethodImpl(InliningOptions.ShortMethod)]
public void FromL16(L16 source) => this.FromScaledVector4(source.ToScaledVector4());
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa16(La16 source) => this.FromScaledVector4(source.ToScaledVector4());
+
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa32(La32 source) => this.FromScaledVector4(source.ToScaledVector4());
+
///
[MethodImpl(InliningOptions.ShortMethod)]
public void FromRgb24(Rgb24 source) => this.FromScaledVector4(source.ToScaledVector4());
@@ -161,4 +169,4 @@ namespace SixLabors.ImageSharp.PixelFormats
return (uint)(((int)Math.Round(vector.X) & 0xFFFF) | (((int)Math.Round(vector.Y) & 0xFFFF) << 16));
}
}
-}
\ No newline at end of file
+}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Rgb24.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Rgb24.cs
index c694e04cf..65191e86f 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Rgb24.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Rgb24.cs
@@ -172,6 +172,25 @@ namespace SixLabors.ImageSharp.PixelFormats
this.B = rgb;
}
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa16(La16 source)
+ {
+ this.R = source.L;
+ this.G = source.L;
+ this.B = source.L;
+ }
+
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa32(La32 source)
+ {
+ byte rgb = ImageMaths.DownScaleFrom16BitTo8Bit(source.L);
+ this.R = rgb;
+ this.G = rgb;
+ this.B = rgb;
+ }
+
///
[MethodImpl(InliningOptions.ShortMethod)]
public void FromBgra5551(Bgra5551 source) => this.FromScaledVector4(source.ToScaledVector4());
@@ -242,4 +261,4 @@ namespace SixLabors.ImageSharp.PixelFormats
this.B = (byte)vector.Z;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Rgb48.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Rgb48.cs
index c5e459ab4..c78219a48 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Rgb48.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Rgb48.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Six Labors and contributors.
+// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
using System;
@@ -149,6 +149,25 @@ namespace SixLabors.ImageSharp.PixelFormats
this.B = source.PackedValue;
}
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa16(La16 source)
+ {
+ ushort rgb = ImageMaths.UpscaleFrom8BitTo16Bit(source.L);
+ this.R = rgb;
+ this.G = rgb;
+ this.B = rgb;
+ }
+
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa32(La32 source)
+ {
+ this.R = source.L;
+ this.G = source.L;
+ this.B = source.L;
+ }
+
///
[MethodImpl(InliningOptions.ShortMethod)]
public void FromRgb24(Rgb24 source)
@@ -195,4 +214,4 @@ namespace SixLabors.ImageSharp.PixelFormats
[MethodImpl(InliningOptions.ShortMethod)]
public override int GetHashCode() => HashCode.Combine(this.R, this.G, this.B);
}
-}
\ No newline at end of file
+}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Rgba1010102.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Rgba1010102.cs
index 773426dc4..330f5a8ee 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Rgba1010102.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Rgba1010102.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Six Labors and contributors.
+// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
using System;
@@ -111,6 +111,14 @@ namespace SixLabors.ImageSharp.PixelFormats
[MethodImpl(InliningOptions.ShortMethod)]
public void FromL16(L16 source) => this.FromScaledVector4(source.ToScaledVector4());
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa16(La16 source) => this.FromScaledVector4(source.ToScaledVector4());
+
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa32(La32 source) => this.FromScaledVector4(source.ToScaledVector4());
+
///
[MethodImpl(InliningOptions.ShortMethod)]
public void FromRgb24(Rgb24 source) => this.FromScaledVector4(source.ToScaledVector4());
@@ -164,4 +172,4 @@ namespace SixLabors.ImageSharp.PixelFormats
| (((int)Math.Round(vector.W) & 0x03) << 30));
}
}
-}
\ No newline at end of file
+}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Rgba32.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Rgba32.cs
index 5693e24d7..10631e2cf 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Rgba32.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Rgba32.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Six Labors and contributors.
+// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
using System;
@@ -326,6 +326,27 @@ namespace SixLabors.ImageSharp.PixelFormats
this.A = byte.MaxValue;
}
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa16(La16 source)
+ {
+ this.R = source.L;
+ this.G = source.L;
+ this.B = source.L;
+ this.A = source.A;
+ }
+
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa32(La32 source)
+ {
+ byte rgb = ImageMaths.DownScaleFrom16BitTo8Bit(source.L);
+ this.R = rgb;
+ this.G = rgb;
+ this.B = rgb;
+ this.A = ImageMaths.DownScaleFrom16BitTo8Bit(source.A);
+ }
+
///
[MethodImpl(InliningOptions.ShortMethod)]
public void FromRgb24(Rgb24 source)
@@ -483,4 +504,4 @@ namespace SixLabors.ImageSharp.PixelFormats
return new string(new[] { r, r, g, g, b, b, a, a });
}
}
-}
\ No newline at end of file
+}
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Rgba64.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Rgba64.cs
index 6a48f0e98..56bc6f455 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Rgba64.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Rgba64.cs
@@ -275,6 +275,27 @@ namespace SixLabors.ImageSharp.PixelFormats
this.A = ushort.MaxValue;
}
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa16(La16 source)
+ {
+ ushort rgb = ImageMaths.UpscaleFrom8BitTo16Bit(source.L);
+ this.R = rgb;
+ this.G = rgb;
+ this.B = rgb;
+ this.A = ImageMaths.UpscaleFrom8BitTo16Bit(source.A);
+ }
+
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa32(La32 source)
+ {
+ this.R = source.L;
+ this.G = source.L;
+ this.B = source.L;
+ this.A = source.A;
+ }
+
///
[MethodImpl(InliningOptions.ShortMethod)]
public void FromRgb24(Rgb24 source)
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/RgbaVector.cs b/src/ImageSharp/PixelFormats/PixelImplementations/RgbaVector.cs
index 36b1a991f..67f09f3a5 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/RgbaVector.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/RgbaVector.cs
@@ -146,6 +146,14 @@ namespace SixLabors.ImageSharp.PixelFormats
[MethodImpl(InliningOptions.ShortMethod)]
public void FromL16(L16 source) => this.FromScaledVector4(source.ToScaledVector4());
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa16(La16 source) => this.FromScaledVector4(source.ToScaledVector4());
+
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa32(La32 source) => this.FromScaledVector4(source.ToScaledVector4());
+
///
[MethodImpl(InliningOptions.ShortMethod)]
public void FromRgb24(Rgb24 source) => this.FromScaledVector4(source.ToScaledVector4());
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Short2.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Short2.cs
index 441f4338e..1cc7d269c 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Short2.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Short2.cs
@@ -123,6 +123,14 @@ namespace SixLabors.ImageSharp.PixelFormats
[MethodImpl(InliningOptions.ShortMethod)]
public void FromL16(L16 source) => this.FromScaledVector4(source.ToScaledVector4());
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa16(La16 source) => this.FromScaledVector4(source.ToScaledVector4());
+
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa32(La32 source) => this.FromScaledVector4(source.ToScaledVector4());
+
///
[MethodImpl(InliningOptions.ShortMethod)]
public void FromRgb24(Rgb24 source) => this.FromScaledVector4(source.ToScaledVector4());
diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Short4.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Short4.cs
index e294c07ae..433f49f15 100644
--- a/src/ImageSharp/PixelFormats/PixelImplementations/Short4.cs
+++ b/src/ImageSharp/PixelFormats/PixelImplementations/Short4.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Six Labors and contributors.
+// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
using System;
@@ -128,6 +128,14 @@ namespace SixLabors.ImageSharp.PixelFormats
[MethodImpl(InliningOptions.ShortMethod)]
public void FromL16(L16 source) => this.FromScaledVector4(source.ToScaledVector4());
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa16(La16 source) => this.FromScaledVector4(source.ToScaledVector4());
+
+ ///
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void FromLa32(La32 source) => this.FromScaledVector4(source.ToScaledVector4());
+
///
[MethodImpl(InliningOptions.ShortMethod)]
public void FromRgb24(Rgb24 source) => this.FromScaledVector4(source.ToScaledVector4());
@@ -186,4 +194,4 @@ namespace SixLabors.ImageSharp.PixelFormats
return word4 | word3 | word2 | word1;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.Generated.cs b/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.Generated.cs
index c3f737b97..1bc237100 100644
--- a/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.Generated.cs
+++ b/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.Generated.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Six Labors and contributors.
+// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
//
@@ -13,7 +13,7 @@ namespace SixLabors.ImageSharp.PixelFormats
///
/// Converts all pixels in 'source` span of into a span of -s.
///
- /// A to configure internal operations
+ /// A to configure internal operations.
/// The source of data.
/// The to the destination pixels.
internal virtual void FromArgb32(Configuration configuration, ReadOnlySpan source, Span destPixels)
@@ -36,7 +36,7 @@ namespace SixLabors.ImageSharp.PixelFormats
/// A helper for that expects a byte span.
/// The layout of the data in 'sourceBytes' must be compatible with layout.
///
- /// A to configure internal operations
+ /// A to configure internal operations.
/// The to the source bytes.
/// The to the destination pixels.
/// The number of pixels to convert.
@@ -85,7 +85,7 @@ namespace SixLabors.ImageSharp.PixelFormats
///
/// Converts all pixels in 'source` span of into a span of -s.
///
- /// A to configure internal operations
+ /// A to configure internal operations.
/// The source of data.
/// The to the destination pixels.
internal virtual void FromBgr24(Configuration configuration, ReadOnlySpan source, Span destPixels)
@@ -108,7 +108,7 @@ namespace SixLabors.ImageSharp.PixelFormats
/// A helper for that expects a byte span.
/// The layout of the data in 'sourceBytes' must be compatible with layout.
///
- /// A to configure internal operations
+ /// A to configure internal operations.
/// The to the source bytes.
/// The to the destination pixels.
/// The number of pixels to convert.
@@ -157,7 +157,7 @@ namespace SixLabors.ImageSharp.PixelFormats
///
/// Converts all pixels in 'source` span of into a span of -s.
///
- /// A to configure internal operations
+ /// A to configure internal operations.
/// The source of data.
/// The to the destination pixels.
internal virtual void FromBgra32(Configuration configuration, ReadOnlySpan source, Span destPixels)
@@ -180,7 +180,7 @@ namespace SixLabors.ImageSharp.PixelFormats
/// A helper for that expects a byte span.
/// The layout of the data in 'sourceBytes' must be compatible with layout.
///
- /// A to configure internal operations
+ /// A to configure internal operations.
/// The to the source bytes.
/// The to the destination pixels.
/// The number of pixels to convert.
@@ -229,7 +229,7 @@ namespace SixLabors.ImageSharp.PixelFormats
///
/// Converts all pixels in 'source` span of into a span of -s.
///
- /// A to configure internal operations
+ /// A to configure internal operations.
/// The source of data.
/// The to the destination pixels.
internal virtual void FromL8(Configuration configuration, ReadOnlySpan source, Span destPixels)
@@ -252,7 +252,7 @@ namespace SixLabors.ImageSharp.PixelFormats
/// A helper for that expects a byte span.
/// The layout of the data in 'sourceBytes' must be compatible with layout.
///
- /// A to configure internal operations
+ /// A to configure internal operations.
/// The to the source bytes.
/// The to the destination pixels.
/// The number of pixels to convert.
@@ -301,7 +301,7 @@ namespace SixLabors.ImageSharp.PixelFormats
///
/// Converts all pixels in 'source` span of into a span of -s.
///
- /// A to configure internal operations
+ /// A to configure internal operations.
/// The source of data.
/// The to the destination pixels.
internal virtual void FromL16(Configuration configuration, ReadOnlySpan source, Span destPixels)
@@ -324,7 +324,7 @@ namespace SixLabors.ImageSharp.PixelFormats
/// A helper for that expects a byte span.
/// The layout of the data in 'sourceBytes' must be compatible with layout.
///
- /// A to configure internal operations
+ /// A to configure internal operations.
/// The to the source bytes.
/// The to the destination pixels.
/// The number of pixels to convert.
@@ -371,9 +371,153 @@ namespace SixLabors.ImageSharp.PixelFormats
}
///
- /// Converts all pixels in 'source` span of into a span of -s.
+ /// Converts all pixels in 'source` span of into a span of -s.
+ ///
+ /// A to configure internal operations.
+ /// The source of data.
+ /// The to the destination pixels.
+ internal virtual void FromLa16(Configuration configuration, ReadOnlySpan source, Span destPixels)
+ {
+ Guard.DestinationShouldNotBeTooShort(source, destPixels, nameof(destPixels));
+
+ ref La16 sourceBaseRef = ref MemoryMarshal.GetReference(source);
+ ref TPixel destBaseRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < source.Length; i++)
+ {
+ ref La16 sp = ref Unsafe.Add(ref sourceBaseRef, i);
+ ref TPixel dp = ref Unsafe.Add(ref destBaseRef, i);
+
+ dp.FromLa16(sp);
+ }
+ }
+
+ ///
+ /// A helper for that expects a byte span.
+ /// The layout of the data in 'sourceBytes' must be compatible with layout.
+ ///
+ /// A to configure internal operations.
+ /// The to the source bytes.
+ /// The to the destination pixels.
+ /// The number of pixels to convert.
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ internal void FromLa16Bytes(Configuration configuration, ReadOnlySpan sourceBytes, Span destPixels, int count)
+ {
+ this.FromLa16(configuration, MemoryMarshal.Cast(sourceBytes).Slice(0, count), destPixels);
+ }
+
+ ///
+ /// Converts all pixels of the 'sourcePixels` span to a span of -s.
+ ///
+ /// A to configure internal operations
+ /// The span of source pixels
+ /// The destination span of data.
+ internal virtual void ToLa16(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref TPixel sourceBaseRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref La16 destBaseRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref TPixel sp = ref Unsafe.Add(ref sourceBaseRef, i);
+ ref La16 dp = ref Unsafe.Add(ref destBaseRef, i);
+
+ dp.FromScaledVector4(sp.ToScaledVector4());
+ }
+ }
+
+ ///
+ /// A helper for that expects a byte span as destination.
+ /// The layout of the data in 'destBytes' must be compatible with layout.
+ ///
+ /// A to configure internal operations
+ /// The to the source pixels.
+ /// The to the destination bytes.
+ /// The number of pixels to convert.
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ internal void ToLa16Bytes(Configuration configuration, ReadOnlySpan sourcePixels, Span destBytes, int count)
+ {
+ this.ToLa16(configuration, sourcePixels.Slice(0, count), MemoryMarshal.Cast(destBytes));
+ }
+
+ ///
+ /// Converts all pixels in 'source` span of into a span of -s.
+ ///
+ /// A to configure internal operations.
+ /// The source of data.
+ /// The to the destination pixels.
+ internal virtual void FromLa32(Configuration configuration, ReadOnlySpan source, Span destPixels)
+ {
+ Guard.DestinationShouldNotBeTooShort(source, destPixels, nameof(destPixels));
+
+ ref La32 sourceBaseRef = ref MemoryMarshal.GetReference(source);
+ ref TPixel destBaseRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < source.Length; i++)
+ {
+ ref La32 sp = ref Unsafe.Add(ref sourceBaseRef, i);
+ ref TPixel dp = ref Unsafe.Add(ref destBaseRef, i);
+
+ dp.FromLa32(sp);
+ }
+ }
+
+ ///
+ /// A helper for that expects a byte span.
+ /// The layout of the data in 'sourceBytes' must be compatible with layout.
+ ///
+ /// A to configure internal operations.
+ /// The to the source bytes.
+ /// The to the destination pixels.
+ /// The number of pixels to convert.
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ internal void FromLa32Bytes(Configuration configuration, ReadOnlySpan sourceBytes, Span destPixels, int count)
+ {
+ this.FromLa32(configuration, MemoryMarshal.Cast(sourceBytes).Slice(0, count), destPixels);
+ }
+
+ ///
+ /// Converts all pixels of the 'sourcePixels` span to a span of -s.
///
/// A to configure internal operations
+ /// The span of source pixels
+ /// The destination span of data.
+ internal virtual void ToLa32(Configuration configuration, ReadOnlySpan sourcePixels, Span destPixels)
+ {
+ Guard.DestinationShouldNotBeTooShort(sourcePixels, destPixels, nameof(destPixels));
+
+ ref TPixel sourceBaseRef = ref MemoryMarshal.GetReference(sourcePixels);
+ ref La32 destBaseRef = ref MemoryMarshal.GetReference(destPixels);
+
+ for (int i = 0; i < sourcePixels.Length; i++)
+ {
+ ref TPixel sp = ref Unsafe.Add(ref sourceBaseRef, i);
+ ref La32 dp = ref Unsafe.Add(ref destBaseRef, i);
+
+ dp.FromScaledVector4(sp.ToScaledVector4());
+ }
+ }
+
+ ///
+ /// A helper for that expects a byte span as destination.
+ /// The layout of the data in 'destBytes' must be compatible with layout.
+ ///
+ /// A to configure internal operations
+ /// The to the source pixels.
+ /// The to the destination bytes.
+ /// The number of pixels to convert.
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ internal void ToLa32Bytes(Configuration configuration, ReadOnlySpan sourcePixels, Span destBytes, int count)
+ {
+ this.ToLa32(configuration, sourcePixels.Slice(0, count), MemoryMarshal.Cast(destBytes));
+ }
+
+ ///
+ /// Converts all pixels in 'source` span of into a span of -s.
+ ///
+ /// A to configure internal operations.
/// The source of data.
/// The to the destination pixels.
internal virtual void FromRgb24(Configuration configuration, ReadOnlySpan source, Span destPixels)
@@ -396,7 +540,7 @@ namespace SixLabors.ImageSharp.PixelFormats
/// A helper for that expects a byte span.
/// The layout of the data in 'sourceBytes' must be compatible with layout.
///
- /// A to configure internal operations
+ /// A to configure internal operations.
/// The to the source bytes.
/// The to the destination pixels.
/// The number of pixels to convert.
@@ -445,7 +589,7 @@ namespace SixLabors.ImageSharp.PixelFormats
///
/// Converts all pixels in 'source` span of into a span of -s.
///
- /// A to configure internal operations
+ /// A to configure internal operations.
/// The source of data.
/// The to the destination pixels.
internal virtual void FromRgba32(Configuration configuration, ReadOnlySpan source, Span destPixels)
@@ -468,7 +612,7 @@ namespace SixLabors.ImageSharp.PixelFormats
/// A helper for that expects a byte span.
/// The layout of the data in 'sourceBytes' must be compatible with layout.
///
- /// A to configure internal operations
+ /// A to configure internal operations.
/// The to the source bytes.
/// The to the destination pixels.
/// The number of pixels to convert.
@@ -517,7 +661,7 @@ namespace SixLabors.ImageSharp.PixelFormats
///
/// Converts all pixels in 'source` span of into a span of -s.
///
- /// A to configure internal operations
+ /// A to configure internal operations.
/// The source of data.
/// The to the destination pixels.
internal virtual void FromRgb48(Configuration configuration, ReadOnlySpan source, Span destPixels)
@@ -540,7 +684,7 @@ namespace SixLabors.ImageSharp.PixelFormats
/// A helper for that expects a byte span.
/// The layout of the data in 'sourceBytes' must be compatible with layout.
///
- /// A to configure internal operations
+ /// A to configure internal operations.
/// The to the source bytes.
/// The to the destination pixels.
/// The number of pixels to convert.
@@ -589,7 +733,7 @@ namespace SixLabors.ImageSharp.PixelFormats
///
/// Converts all pixels in 'source` span of into a span of -s.
///
- /// A to configure internal operations
+ /// A to configure internal operations.
/// The source of data.
/// The to the destination pixels.
internal virtual void FromRgba64(Configuration configuration, ReadOnlySpan source, Span destPixels)
@@ -612,7 +756,7 @@ namespace SixLabors.ImageSharp.PixelFormats
/// A helper for that expects a byte span.
/// The layout of the data in 'sourceBytes' must be compatible with layout.
///
- /// A to configure internal operations
+ /// A to configure internal operations.
/// The to the source bytes.
/// The to the destination pixels.
/// The number of pixels to convert.
@@ -661,7 +805,7 @@ namespace SixLabors.ImageSharp.PixelFormats
///
/// Converts all pixels in 'source` span of into a span of -s.
///
- /// A to configure internal operations
+ /// A to configure internal operations.
/// The source of data.
/// The to the destination pixels.
internal virtual void FromBgra5551(Configuration configuration, ReadOnlySpan source, Span destPixels)
@@ -684,7 +828,7 @@ namespace SixLabors.ImageSharp.PixelFormats
/// A helper for that expects a byte span.
/// The layout of the data in 'sourceBytes' must be compatible with layout.
///
- /// A to configure internal operations
+ /// A to configure internal operations.
/// The to the source bytes.
/// The to the destination pixels.
/// The number of pixels to convert.
@@ -730,4 +874,4 @@ namespace SixLabors.ImageSharp.PixelFormats
this.ToBgra5551(configuration, sourcePixels.Slice(0, count), MemoryMarshal.Cast(destBytes));
}
}
-}
\ No newline at end of file
+}
diff --git a/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.Generated.tt b/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.Generated.tt
index 0ed221e61..a9fe3ea20 100644
--- a/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.Generated.tt
+++ b/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.Generated.tt
@@ -1,4 +1,4 @@
-<#
+<#
// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
#>
@@ -124,6 +124,12 @@ namespace SixLabors.ImageSharp.PixelFormats
GenerateFromMethods("L16");
GenerateToDestFormatMethods("L16");
+ GenerateFromMethods("La16");
+ GenerateToDestFormatMethods("La16");
+
+ GenerateFromMethods("La32");
+ GenerateToDestFormatMethods("La32");
+
GenerateFromMethods("Rgb24");
GenerateToDestFormatMethods("Rgb24");
@@ -140,4 +146,4 @@ namespace SixLabors.ImageSharp.PixelFormats
GenerateToDestFormatMethods("Bgra5551");
#> }
-}
\ No newline at end of file
+}
diff --git a/tests/ImageSharp.Tests/TestFormat.cs b/tests/ImageSharp.Tests/TestFormat.cs
index 12915ab29..0f44b8e1c 100644
--- a/tests/ImageSharp.Tests/TestFormat.cs
+++ b/tests/ImageSharp.Tests/TestFormat.cs
@@ -254,6 +254,8 @@ namespace SixLabors.ImageSharp.Tests
public void FromBgra32(Bgra32 source) { }
public void FromL8(L8 source) { }
public void FromL16(L16 source) { }
+ public void FromLa16(La16 source) { }
+ public void FromLa32(La32 source) { }
public void FromRgb24(Rgb24 source) { }
public void FromRgba32(Rgba32 source) { }
public void ToRgba32(ref Rgba32 dest) { }