/// <summary> /// Adapts linear RGB color from the source working space to working space set in <see cref="TargetRGBWorkingSpace"/>. /// </summary> public LinearRGBColor Adapt(LinearRGBColor color) { if (color == null) { throw new ArgumentNullException("color"); } if (!IsChromaticAdaptationPerformed) { throw new InvalidOperationException("Cannot perform chromatic adaptation, provide chromatic adaptation method and white point."); } if (color.WorkingSpace.Equals(TargetRGBWorkingSpace)) { return(color); } // conversion to XYZ var converterToXYZ = GetLinearRGBToXYZConverter(color.WorkingSpace); XYZColor unadapted = converterToXYZ.Convert(color); // adaptation XYZColor adapted = ChromaticAdaptation.Transform(unadapted, color.WorkingSpace.WhitePoint, TargetRGBWorkingSpace.WhitePoint); // conversion back to RGB var converterToRGB = GetXYZToLinearRGBConverter(TargetRGBWorkingSpace); LinearRGBColor result = converterToRGB.Convert(adapted); return(result); }
public LinearRGBColor ToLinearRGB(XYZColor color) { if (color == null) { throw new ArgumentNullException("color"); } // adaptation XYZColor adapted = TargetRGBWorkingSpace.WhitePoint.Equals(WhitePoint) || !IsChromaticAdaptationPerformed ? color : ChromaticAdaptation.Transform(color, WhitePoint, TargetRGBWorkingSpace.WhitePoint); // conversion to linear RGB var xyzConverter = GetXYZToLinearRGBConverter(TargetRGBWorkingSpace); LinearRGBColor result = xyzConverter.Convert(adapted); return(result); }
public LuvColor ToLuv(XYZColor color) { if (color == null) { throw new ArgumentNullException("color"); } // adaptation XYZColor adapted = !WhitePoint.Equals(TargetLuvWhitePoint) && IsChromaticAdaptationPerformed ? ChromaticAdaptation.Transform(color, WhitePoint, TargetLuvWhitePoint) : color; // conversion var converter = new XYZToLuvConverter(TargetLuvWhitePoint); LuvColor result = converter.Convert(adapted); return(result); }
/// <summary> /// Performs chromatic adaptation of given XYZ color. /// Target white point is <see cref="WhitePoint"/>. /// </summary> public XYZColor Adapt(XYZColor color, XYZColor sourceWhitePoint) { if (color == null) { throw new ArgumentNullException("color"); } if (sourceWhitePoint == null) { throw new ArgumentNullException("sourceWhitePoint"); } if (!IsChromaticAdaptationPerformed) { throw new InvalidOperationException("Cannot perform chromatic adaptation, provide chromatic adaptation method and white point."); } XYZColor result = ChromaticAdaptation.Transform(color, sourceWhitePoint, WhitePoint); return(result); }