From 4ef62b893484f19d3cf02446d28d877af4b3d810 Mon Sep 17 00:00:00 2001 From: Johannes Bildstein Date: Tue, 4 Apr 2017 17:14:35 +0200 Subject: [PATCH] fix RGB conversion conversion matrix had rows and columns switched XYZ to RGB needs to invert conversion matrix --- .../Implementation/Rgb/CieXyzToLinearRgbConverter.cs | 3 ++- .../Rgb/LinearRgbAndCieXyzConverterBase.cs | 12 ++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/ImageSharp/Colors/Spaces/Conversion/Implementation/Rgb/CieXyzToLinearRgbConverter.cs b/src/ImageSharp/Colors/Spaces/Conversion/Implementation/Rgb/CieXyzToLinearRgbConverter.cs index 5f6ec8bd6..4dc66d758 100644 --- a/src/ImageSharp/Colors/Spaces/Conversion/Implementation/Rgb/CieXyzToLinearRgbConverter.cs +++ b/src/ImageSharp/Colors/Spaces/Conversion/Implementation/Rgb/CieXyzToLinearRgbConverter.cs @@ -44,7 +44,8 @@ namespace ImageSharp.Colors.Spaces.Conversion.Implementation.Rgb { DebugGuard.NotNull(input, nameof(input)); - Vector3 vector = Vector3.Transform(input.Vector, this.conversionMatrix); + Matrix4x4.Invert(this.conversionMatrix, out Matrix4x4 inverted); + Vector3 vector = Vector3.Transform(input.Vector, inverted); return new LinearRgb(vector, this.TargetWorkingSpace); } } diff --git a/src/ImageSharp/Colors/Spaces/Conversion/Implementation/Rgb/LinearRgbAndCieXyzConverterBase.cs b/src/ImageSharp/Colors/Spaces/Conversion/Implementation/Rgb/LinearRgbAndCieXyzConverterBase.cs index 67bd024cf..e5bd1fc77 100644 --- a/src/ImageSharp/Colors/Spaces/Conversion/Implementation/Rgb/LinearRgbAndCieXyzConverterBase.cs +++ b/src/ImageSharp/Colors/Spaces/Conversion/Implementation/Rgb/LinearRgbAndCieXyzConverterBase.cs @@ -44,9 +44,9 @@ namespace ImageSharp.Colors.Spaces.Conversion.Implementation.Rgb Matrix4x4 xyzMatrix = new Matrix4x4 { - M11 = mXr, M12 = mXg, M13 = mXb, - M21 = Yr, M22 = Yg, M23 = Yb, - M31 = mZr, M32 = mZg, M33 = mZb, + M11 = mXr, M21 = mXg, M31 = mXb, + M12 = Yr, M22 = Yg, M32 = Yb, + M13 = mZr, M23 = mZg, M33 = mZb, M44 = 1F }; @@ -58,9 +58,9 @@ namespace ImageSharp.Colors.Spaces.Conversion.Implementation.Rgb // TODO: Is there a built in method for this? return new Matrix4x4 { - M11 = vector.X * mXr, M12 = vector.Y * mXg, M13 = vector.Z * mXb, - M21 = vector.X * Yr, M22 = vector.Y * Yg, M23 = vector.Z * Yb, - M31 = vector.X * mZr, M32 = vector.Y * mZg, M33 = vector.Z * mZb, + M11 = vector.X * mXr, M21 = vector.Y * mXg, M31 = vector.Z * mXb, + M12 = vector.X * Yr, M22 = vector.Y * Yg, M32 = vector.Z * Yb, + M13 = vector.X * mZr, M23 = vector.Y * mZg, M33 = vector.Z * mZb, M44 = 1F }; }