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