Browse Source

fix RGB conversion

conversion matrix had rows and columns switched
XYZ to RGB needs to invert conversion matrix
af/merge-core
Johannes Bildstein 9 years ago
parent
commit
a38326de55
  1. 3
      src/ImageSharp/Colors/Spaces/Conversion/Implementation/Rgb/CieXyzToLinearRgbConverter.cs
  2. 12
      src/ImageSharp/Colors/Spaces/Conversion/Implementation/Rgb/LinearRgbAndCieXyzConverterBase.cs

3
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)); 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); return new LinearRgb(vector, this.TargetWorkingSpace);
} }
} }

12
src/ImageSharp/Colors/Spaces/Conversion/Implementation/Rgb/LinearRgbAndCieXyzConverterBase.cs

@ -44,9 +44,9 @@ namespace ImageSharp.Colors.Spaces.Conversion.Implementation.Rgb
Matrix4x4 xyzMatrix = new Matrix4x4 Matrix4x4 xyzMatrix = new Matrix4x4
{ {
M11 = mXr, M12 = mXg, M13 = mXb, M11 = mXr, M21 = mXg, M31 = mXb,
M21 = Yr, M22 = Yg, M23 = Yb, M12 = Yr, M22 = Yg, M32 = Yb,
M31 = mZr, M32 = mZg, M33 = mZb, M13 = mZr, M23 = mZg, M33 = mZb,
M44 = 1F M44 = 1F
}; };
@ -58,9 +58,9 @@ namespace ImageSharp.Colors.Spaces.Conversion.Implementation.Rgb
// TODO: Is there a built in method for this? // TODO: Is there a built in method for this?
return new Matrix4x4 return new Matrix4x4
{ {
M11 = vector.X * mXr, M12 = vector.Y * mXg, M13 = vector.Z * mXb, M11 = vector.X * mXr, M21 = vector.Y * mXg, M31 = vector.Z * mXb,
M21 = vector.X * Yr, M22 = vector.Y * Yg, M23 = vector.Z * Yb, M12 = vector.X * Yr, M22 = vector.Y * Yg, M32 = vector.Z * Yb,
M31 = vector.X * mZr, M32 = vector.Y * mZg, M33 = vector.Z * mZb, M13 = vector.X * mZr, M23 = vector.Y * mZg, M33 = vector.Z * mZb,
M44 = 1F M44 = 1F
}; };
} }

Loading…
Cancel
Save