Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 14 additions & 10 deletions src/ImageSharp/ColorSpaces/Companding/SRgbCompanding.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,7 @@ public static void Expand(Span<Vector4> vectors)
for (int i = 0; i < vectors.Length; i++)
{
ref Vector4 v = ref Unsafe.Add(ref baseRef, i);
v.X = Expand(v.X);
v.Y = Expand(v.Y);
v.Z = Expand(v.Z);
Expand(ref v);
}
}

Expand All @@ -48,27 +46,33 @@ public static void Compress(Span<Vector4> vectors)
for (int i = 0; i < vectors.Length; i++)
{
ref Vector4 v = ref Unsafe.Add(ref baseRef, i);
v.X = Compress(v.X);
v.Y = Compress(v.Y);
v.Z = Compress(v.Z);
Compress(ref v);
}
}

/// <summary>
/// Expands a companded vector to its linear equivalent with respect to the energy.
/// </summary>
/// <param name="vector">The vector.</param>
/// <returns>The <see cref="Vector4"/> representing the linear channel values.</returns>
[MethodImpl(InliningOptions.ShortMethod)]
public static Vector4 Expand(Vector4 vector) => new Vector4(Expand(vector.X), Expand(vector.Y), Expand(vector.Z), vector.W);
public static void Expand(ref Vector4 vector)
{
vector.X = Expand(vector.X);
vector.Y = Expand(vector.Y);
vector.Z = Expand(vector.Z);
}

/// <summary>
/// Compresses an uncompanded vector (linear) to its nonlinear equivalent.
/// </summary>
/// <param name="vector">The vector.</param>
/// <returns>The <see cref="Vector4"/> representing the nonlinear channel values.</returns>
[MethodImpl(InliningOptions.ShortMethod)]
public static Vector4 Compress(Vector4 vector) => new Vector4(Compress(vector.X), Compress(vector.Y), Compress(vector.Z), vector.W);
public static void Compress(ref Vector4 vector)
{
vector.X = Compress(vector.X);
vector.Y = Compress(vector.Y);
vector.Z = Compress(vector.Z);
}

/// <summary>
/// Expands a companded channel to its linear equivalent with respect to the energy.
Expand Down
12 changes: 3 additions & 9 deletions src/ImageSharp/Common/Helpers/Guard.cs
Original file line number Diff line number Diff line change
Expand Up @@ -278,20 +278,14 @@ public static void MustBeSizedAtLeast<T>(Span<T> source, int minLength, string p

[MethodImpl(InliningOptions.ColdPath)]
private static void ThrowArgumentException(string message, string parameterName)
{
throw new ArgumentException(message, parameterName);
}
=> throw new ArgumentException(message, parameterName);

[MethodImpl(InliningOptions.ColdPath)]
private static void ThrowArgumentOutOfRangeException(string parameterName, string message)
{
throw new ArgumentOutOfRangeException(parameterName, message);
}
=> throw new ArgumentOutOfRangeException(parameterName, message);

[MethodImpl(InliningOptions.ColdPath)]
private static void ThrowArgumentNullException(string parameterName)
{
throw new ArgumentNullException(parameterName);
}
=> throw new ArgumentNullException(parameterName);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,25 +44,49 @@ internal override void ToArgb32(Configuration configuration, ReadOnlySpan<Argb32
/// <inheritdoc />
internal override void FromVector4(Configuration configuration, ReadOnlySpan<Vector4> sourceVectors, Span<Argb32> destPixels)
{
Vector4Converters.RgbaCompatible.FromVector4(configuration, this, sourceVectors, destPixels, false);
Vector4Converters.RgbaCompatible.FromVector4(configuration, this, sourceVectors, destPixels);
}

/// <inheritdoc />
internal override void ToVector4(Configuration configuration, ReadOnlySpan<Argb32> sourcePixels, Span<Vector4> destVectors)
{
Vector4Converters.RgbaCompatible.ToVector4(configuration, this, sourcePixels, destVectors, false);
Vector4Converters.RgbaCompatible.ToVector4(configuration, this, sourcePixels, destVectors);
}

/// <inheritdoc />
internal override void FromScaledVector4(Configuration configuration, ReadOnlySpan<Vector4> sourceVectors, Span<Argb32> destPixels)
{
Vector4Converters.RgbaCompatible.FromVector4(configuration, this, sourceVectors, destPixels, true);
Vector4Converters.RgbaCompatible.FromScaledVector4(configuration, this, sourceVectors, destPixels);
}

/// <inheritdoc />
internal override void ToScaledVector4(Configuration configuration, ReadOnlySpan<Argb32> sourcePixels, Span<Vector4> destVectors)
{
Vector4Converters.RgbaCompatible.ToVector4(configuration, this, sourcePixels, destVectors, true);
Vector4Converters.RgbaCompatible.ToScaledVector4(configuration, this, sourcePixels, destVectors);
}

/// <inheritdoc />
internal override void ToPremultipliedVector4(Configuration configuration, ReadOnlySpan<Argb32> sourcePixels, Span<Vector4> destVectors)
{
Vector4Converters.RgbaCompatible.ToPremultipliedVector4(configuration, this, sourcePixels, destVectors);
}

/// <inheritdoc />
internal override void ToPremultipliedScaledVector4(Configuration configuration, ReadOnlySpan<Argb32> sourcePixels, Span<Vector4> destVectors)
{
Vector4Converters.RgbaCompatible.ToPremultipliedScaledVector4(configuration, this, sourcePixels, destVectors);
}

/// <inheritdoc />
internal override void ToCompandedScaledVector4(Configuration configuration, ReadOnlySpan<Argb32> sourcePixels, Span<Vector4> destVectors)
{
Vector4Converters.RgbaCompatible.ToCompandedScaledVector4(configuration, this, sourcePixels, destVectors);
}

/// <inheritdoc />
internal override void ToCompandedPremultipliedScaledVector4(Configuration configuration, ReadOnlySpan<Argb32> sourcePixels, Span<Vector4> destVectors)
{
Vector4Converters.RgbaCompatible.ToCompandedPremultipliedScaledVector4(configuration, this, sourcePixels, destVectors);
}

/// <inheritdoc />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,25 +44,49 @@ internal override void ToBgr24(Configuration configuration, ReadOnlySpan<Bgr24>
/// <inheritdoc />
internal override void FromVector4(Configuration configuration, ReadOnlySpan<Vector4> sourceVectors, Span<Bgr24> destPixels)
{
Vector4Converters.RgbaCompatible.FromVector4(configuration, this, sourceVectors, destPixels, false);
Vector4Converters.RgbaCompatible.FromVector4(configuration, this, sourceVectors, destPixels);
}

/// <inheritdoc />
internal override void ToVector4(Configuration configuration, ReadOnlySpan<Bgr24> sourcePixels, Span<Vector4> destVectors)
{
Vector4Converters.RgbaCompatible.ToVector4(configuration, this, sourcePixels, destVectors, false);
Vector4Converters.RgbaCompatible.ToVector4(configuration, this, sourcePixels, destVectors);
}

/// <inheritdoc />
internal override void FromScaledVector4(Configuration configuration, ReadOnlySpan<Vector4> sourceVectors, Span<Bgr24> destPixels)
{
Vector4Converters.RgbaCompatible.FromVector4(configuration, this, sourceVectors, destPixels, true);
Vector4Converters.RgbaCompatible.FromScaledVector4(configuration, this, sourceVectors, destPixels);
}

/// <inheritdoc />
internal override void ToScaledVector4(Configuration configuration, ReadOnlySpan<Bgr24> sourcePixels, Span<Vector4> destVectors)
{
Vector4Converters.RgbaCompatible.ToVector4(configuration, this, sourcePixels, destVectors, true);
Vector4Converters.RgbaCompatible.ToScaledVector4(configuration, this, sourcePixels, destVectors);
}

/// <inheritdoc />
internal override void ToPremultipliedVector4(Configuration configuration, ReadOnlySpan<Bgr24> sourcePixels, Span<Vector4> destVectors)
{
Vector4Converters.RgbaCompatible.ToPremultipliedVector4(configuration, this, sourcePixels, destVectors);
}

/// <inheritdoc />
internal override void ToPremultipliedScaledVector4(Configuration configuration, ReadOnlySpan<Bgr24> sourcePixels, Span<Vector4> destVectors)
{
Vector4Converters.RgbaCompatible.ToPremultipliedScaledVector4(configuration, this, sourcePixels, destVectors);
}

/// <inheritdoc />
internal override void ToCompandedScaledVector4(Configuration configuration, ReadOnlySpan<Bgr24> sourcePixels, Span<Vector4> destVectors)
{
Vector4Converters.RgbaCompatible.ToCompandedScaledVector4(configuration, this, sourcePixels, destVectors);
}

/// <inheritdoc />
internal override void ToCompandedPremultipliedScaledVector4(Configuration configuration, ReadOnlySpan<Bgr24> sourcePixels, Span<Vector4> destVectors)
{
Vector4Converters.RgbaCompatible.ToCompandedPremultipliedScaledVector4(configuration, this, sourcePixels, destVectors);
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,25 +44,49 @@ internal override void ToBgra32(Configuration configuration, ReadOnlySpan<Bgra32
/// <inheritdoc />
internal override void FromVector4(Configuration configuration, ReadOnlySpan<Vector4> sourceVectors, Span<Bgra32> destPixels)
{
Vector4Converters.RgbaCompatible.FromVector4(configuration, this, sourceVectors, destPixels, false);
Vector4Converters.RgbaCompatible.FromVector4(configuration, this, sourceVectors, destPixels);
}

/// <inheritdoc />
internal override void ToVector4(Configuration configuration, ReadOnlySpan<Bgra32> sourcePixels, Span<Vector4> destVectors)
{
Vector4Converters.RgbaCompatible.ToVector4(configuration, this, sourcePixels, destVectors, false);
Vector4Converters.RgbaCompatible.ToVector4(configuration, this, sourcePixels, destVectors);
}

/// <inheritdoc />
internal override void FromScaledVector4(Configuration configuration, ReadOnlySpan<Vector4> sourceVectors, Span<Bgra32> destPixels)
{
Vector4Converters.RgbaCompatible.FromVector4(configuration, this, sourceVectors, destPixels, true);
Vector4Converters.RgbaCompatible.FromScaledVector4(configuration, this, sourceVectors, destPixels);
}

/// <inheritdoc />
internal override void ToScaledVector4(Configuration configuration, ReadOnlySpan<Bgra32> sourcePixels, Span<Vector4> destVectors)
{
Vector4Converters.RgbaCompatible.ToVector4(configuration, this, sourcePixels, destVectors, true);
Vector4Converters.RgbaCompatible.ToScaledVector4(configuration, this, sourcePixels, destVectors);
}

/// <inheritdoc />
internal override void ToPremultipliedVector4(Configuration configuration, ReadOnlySpan<Bgra32> sourcePixels, Span<Vector4> destVectors)
{
Vector4Converters.RgbaCompatible.ToPremultipliedVector4(configuration, this, sourcePixels, destVectors);
}

/// <inheritdoc />
internal override void ToPremultipliedScaledVector4(Configuration configuration, ReadOnlySpan<Bgra32> sourcePixels, Span<Vector4> destVectors)
{
Vector4Converters.RgbaCompatible.ToPremultipliedScaledVector4(configuration, this, sourcePixels, destVectors);
}

/// <inheritdoc />
internal override void ToCompandedScaledVector4(Configuration configuration, ReadOnlySpan<Bgra32> sourcePixels, Span<Vector4> destVectors)
{
Vector4Converters.RgbaCompatible.ToCompandedScaledVector4(configuration, this, sourcePixels, destVectors);
}

/// <inheritdoc />
internal override void ToCompandedPremultipliedScaledVector4(Configuration configuration, ReadOnlySpan<Bgra32> sourcePixels, Span<Vector4> destVectors)
{
Vector4Converters.RgbaCompatible.ToCompandedPremultipliedScaledVector4(configuration, this, sourcePixels, destVectors);
}

/// <inheritdoc />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,25 +44,49 @@ internal override void ToRgb24(Configuration configuration, ReadOnlySpan<Rgb24>
/// <inheritdoc />
internal override void FromVector4(Configuration configuration, ReadOnlySpan<Vector4> sourceVectors, Span<Rgb24> destPixels)
{
Vector4Converters.RgbaCompatible.FromVector4(configuration, this, sourceVectors, destPixels, false);
Vector4Converters.RgbaCompatible.FromVector4(configuration, this, sourceVectors, destPixels);
}

/// <inheritdoc />
internal override void ToVector4(Configuration configuration, ReadOnlySpan<Rgb24> sourcePixels, Span<Vector4> destVectors)
{
Vector4Converters.RgbaCompatible.ToVector4(configuration, this, sourcePixels, destVectors, false);
Vector4Converters.RgbaCompatible.ToVector4(configuration, this, sourcePixels, destVectors);
}

/// <inheritdoc />
internal override void FromScaledVector4(Configuration configuration, ReadOnlySpan<Vector4> sourceVectors, Span<Rgb24> destPixels)
{
Vector4Converters.RgbaCompatible.FromVector4(configuration, this, sourceVectors, destPixels, true);
Vector4Converters.RgbaCompatible.FromScaledVector4(configuration, this, sourceVectors, destPixels);
}

/// <inheritdoc />
internal override void ToScaledVector4(Configuration configuration, ReadOnlySpan<Rgb24> sourcePixels, Span<Vector4> destVectors)
{
Vector4Converters.RgbaCompatible.ToVector4(configuration, this, sourcePixels, destVectors, true);
Vector4Converters.RgbaCompatible.ToScaledVector4(configuration, this, sourcePixels, destVectors);
}

/// <inheritdoc />
internal override void ToPremultipliedVector4(Configuration configuration, ReadOnlySpan<Rgb24> sourcePixels, Span<Vector4> destVectors)
{
Vector4Converters.RgbaCompatible.ToPremultipliedVector4(configuration, this, sourcePixels, destVectors);
}

/// <inheritdoc />
internal override void ToPremultipliedScaledVector4(Configuration configuration, ReadOnlySpan<Rgb24> sourcePixels, Span<Vector4> destVectors)
{
Vector4Converters.RgbaCompatible.ToPremultipliedScaledVector4(configuration, this, sourcePixels, destVectors);
}

/// <inheritdoc />
internal override void ToCompandedScaledVector4(Configuration configuration, ReadOnlySpan<Rgb24> sourcePixels, Span<Vector4> destVectors)
{
Vector4Converters.RgbaCompatible.ToCompandedScaledVector4(configuration, this, sourcePixels, destVectors);
}

/// <inheritdoc />
internal override void ToCompandedPremultipliedScaledVector4(Configuration configuration, ReadOnlySpan<Rgb24> sourcePixels, Span<Vector4> destVectors)
{
Vector4Converters.RgbaCompatible.ToCompandedPremultipliedScaledVector4(configuration, this, sourcePixels, destVectors);
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,25 +113,49 @@ using System.Runtime.InteropServices;
/// <inheritdoc />
internal override void FromVector4(Configuration configuration, ReadOnlySpan<Vector4> sourceVectors, Span<<#=pixelType#>> destPixels)
{
Vector4Converters.RgbaCompatible.FromVector4(configuration, this, sourceVectors, destPixels, false);
Vector4Converters.RgbaCompatible.FromVector4(configuration, this, sourceVectors, destPixels);
}

/// <inheritdoc />
internal override void ToVector4(Configuration configuration, ReadOnlySpan<<#=pixelType#>> sourcePixels, Span<Vector4> destVectors)
{
Vector4Converters.RgbaCompatible.ToVector4(configuration, this, sourcePixels, destVectors, false);
Vector4Converters.RgbaCompatible.ToVector4(configuration, this, sourcePixels, destVectors);
}

/// <inheritdoc />
internal override void FromScaledVector4(Configuration configuration, ReadOnlySpan<Vector4> sourceVectors, Span<<#=pixelType#>> destPixels)
{
Vector4Converters.RgbaCompatible.FromVector4(configuration, this, sourceVectors, destPixels, true);
Vector4Converters.RgbaCompatible.FromScaledVector4(configuration, this, sourceVectors, destPixels);
}

/// <inheritdoc />
internal override void ToScaledVector4(Configuration configuration, ReadOnlySpan<<#=pixelType#>> sourcePixels, Span<Vector4> destVectors)
{
Vector4Converters.RgbaCompatible.ToVector4(configuration, this, sourcePixels, destVectors, true);
Vector4Converters.RgbaCompatible.ToScaledVector4(configuration, this, sourcePixels, destVectors);
}

/// <inheritdoc />
internal override void ToPremultipliedVector4(Configuration configuration, ReadOnlySpan<<#=pixelType#>> sourcePixels, Span<Vector4> destVectors)
{
Vector4Converters.RgbaCompatible.ToPremultipliedVector4(configuration, this, sourcePixels, destVectors);
}

/// <inheritdoc />
internal override void ToPremultipliedScaledVector4(Configuration configuration, ReadOnlySpan<<#=pixelType#>> sourcePixels, Span<Vector4> destVectors)
{
Vector4Converters.RgbaCompatible.ToPremultipliedScaledVector4(configuration, this, sourcePixels, destVectors);
}

/// <inheritdoc />
internal override void ToCompandedScaledVector4(Configuration configuration, ReadOnlySpan<<#=pixelType#>> sourcePixels, Span<Vector4> destVectors)
{
Vector4Converters.RgbaCompatible.ToCompandedScaledVector4(configuration, this, sourcePixels, destVectors);
}

/// <inheritdoc />
internal override void ToCompandedPremultipliedScaledVector4(Configuration configuration, ReadOnlySpan<<#=pixelType#>> sourcePixels, Span<Vector4> destVectors)
{
Vector4Converters.RgbaCompatible.ToCompandedPremultipliedScaledVector4(configuration, this, sourcePixels, destVectors);
}

<#+
Expand Down
Loading