using System; using Colourful.Implementation.Conversion; namespace Colourful.Conversion { public partial class ColourfulConverter { /// /// Convert to linear RGB /// public LinearRGBColor ToLinearRGB(in RGBColor color) { var converter = RGBToLinearRGBConverter.Default; return converter.Convert(color); } /// /// Convert to linear RGB /// public LinearRGBColor ToLinearRGB(in XYZColor color) { // adaptation var adapted = TargetRGBWorkingSpace.WhitePoint.Equals(WhitePoint) || !IsChromaticAdaptationPerformed ? color : ChromaticAdaptation.Transform(color, WhitePoint, TargetRGBWorkingSpace.WhitePoint); // conversion to linear RGB var xyzConverter = GetXYZToLinearRGBConverter(TargetRGBWorkingSpace); var result = xyzConverter.Convert(adapted); return result; } /// /// Convert to linear RGB /// public LinearRGBColor ToLinearRGB(in xyYColor color) { var xyzColor = ToXYZ(color); var result = ToLinearRGB(xyzColor); return result; } /// /// Convert to linear RGB /// public LinearRGBColor ToLinearRGB(in LabColor color) { var xyzColor = ToXYZ(color); var result = ToLinearRGB(xyzColor); return result; } /// /// Convert to linear RGB /// public LinearRGBColor ToLinearRGB(in LChabColor color) { var xyzColor = ToXYZ(color); var result = ToLinearRGB(xyzColor); return result; } /// /// Convert to linear RGB /// public LinearRGBColor ToLinearRGB(in HunterLabColor color) { var xyzColor = ToXYZ(color); var result = ToLinearRGB(xyzColor); return result; } /// /// Convert to linear RGB /// public LinearRGBColor ToLinearRGB(in LuvColor color) { var xyzColor = ToXYZ(color); var result = ToLinearRGB(xyzColor); return result; } /// /// Convert to linear RGB /// public LinearRGBColor ToLinearRGB(in LChuvColor color) { var xyzColor = ToXYZ(color); var result = ToLinearRGB(xyzColor); return result; } /// /// Convert to linear RGB /// public LinearRGBColor ToLinearRGB(in LMSColor color) { var xyzColor = ToXYZ(color); var result = ToLinearRGB(xyzColor); return result; } /// /// Convert to linear RGB /// public LinearRGBColor ToLinearRGB(T color) where T : IColorVector { switch (color) { case RGBColor typedColor: return ToLinearRGB(in typedColor); case LinearRGBColor typedColor: return typedColor; case XYZColor typedColor: return ToLinearRGB(in typedColor); case xyYColor typedColor: return ToLinearRGB(in typedColor); case HunterLabColor typedColor: return ToLinearRGB(in typedColor); case LabColor typedColor: return ToLinearRGB(in typedColor); case LChabColor typedColor: return ToLinearRGB(in typedColor); case LuvColor typedColor: return ToLinearRGB(in typedColor); case LChuvColor typedColor: return ToLinearRGB(in typedColor); case LMSColor typedColor: return ToLinearRGB(in typedColor); default: throw new ArgumentException($"Cannot accept type '{typeof(T)}'.", nameof(color)); } } } }