Browse Source

fix RGB conversion

conversion matrix had rows and columns switched
XYZ to RGB needs to invert conversion matrix
pull/181/head
Johannes Bildstein 9 years ago
parent
commit
4ef62b8934
  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));
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);
}
}

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
{
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
};
}

Loading…
Cancel
Save