/// <summary>
        /// Create the nearest LCH equivalent of a LAB color.
        /// </summary>
        /// <param name="lab">Target color in LAB space.</param>
        /// <returns>The LCH equivalent of the LAB color.</returns>
        public static ColorLCH CreateFromLAB(ColorLAB lab)
        {
            double l, c, h;

            ColorConverter.CIELAB_To_CIELCH(lab.m_l, lab.m_a, lab.m_b, out l, out c, out h);

            ColorLCH lch = new ColorLCH(l, c, h)
            {
                m_a = lab.m_alpha
            };

            return(lch);
        }
        /// <summary>
        /// Create the nearest LAB equivalent of an LCH color.
        /// </summary>
        /// <param name="lch">Target color in LCH space.</param>
        /// <returns>The LAB equivalent of the LCH color.</returns>
        public static ColorLAB CreateFromLCH(ColorLCH lch)
        {
            double l, a, b;

            ColorConverter.CIELCH_To_CIELAB(lch.m_l, lch.m_c, lch.m_h, out l, out a, out b);

            ColorLAB lab = new ColorLAB(l, a, b)
            {
                m_alpha = lch.m_a
            };

            return(lab);
        }
 /// <summary>
 /// Create the nearest HSL equivalent of a LCH color.
 /// </summary>
 /// <param name="lch">Target color in LCH space.</param>
 /// <returns>The HSL equivalent of the LCH color.</returns>
 public static ColorHSL CreateFromLCH(ColorLCH lch)
 {
   return new ColorHSL(lch);
 }
    /// <summary>
    /// Create the nearest LCH equivalent of a LAB color.
    /// </summary>
    /// <param name="lab">Target color in LAB space.</param>
    /// <returns>The LCH equivalent of the LAB color.</returns>
    public static ColorLCH CreateFromLAB(ColorLAB lab)
    {
      double l, c, h;
      ColorConverter.CIELAB_To_CIELCH(lab.m_l, lab.m_a, lab.m_b, out l, out c, out h);

      ColorLCH lch = new ColorLCH(l, c, h) {m_a = lab.m_alpha};
      return lch;
    }
    /// <summary>
    /// Create the nearest LAB equivalent of an LCH color.
    /// </summary>
    /// <param name="lch">Target color in LCH space.</param>
    /// <returns>The LAB equivalent of the LCH color.</returns>
    public static ColorLAB CreateFromLCH(ColorLCH lch)
    {
      double l, a, b;
      ColorConverter.CIELCH_To_CIELAB(lch.m_l , lch.m_c , lch.m_h, out l, out a, out b);

      ColorLAB lab = new ColorLAB(l, a, b) {m_alpha = lch.m_a};
      return lab;
    }
 /// <summary>
 /// Create the nearest XYZ equivalent of an LCH color.
 /// </summary>
 /// <param name="lch">Target color in LCH space.</param>
 /// <returns>The XYZ equivalent of the LCH color.</returns>
 public static ColorXYZ CreateFromLCH(ColorLCH lch)
 {
   return CreateFromLAB(ColorLAB.CreateFromLCH(lch));
 }
 /// <summary>
 /// Constructs the nearest CMYK equivalent of a LCH color.
 /// </summary>
 /// <param name="lch">Target color in LCH space.</param>
 /// <returns>The CMYK equivalent of the LCH color.</returns>
 public static ColorCMYK CreateFromLCH(ColorLCH lch)
 {
   return new ColorCMYK(lch);
 }
 /// <summary>
 /// Create the nearest HSL equivalent of a LCH color.
 /// </summary>
 /// <param name="lch">Target color in LCH space.</param>
 /// <returns>The HSL equivalent of the LCH color.</returns>
 public static ColorHSL CreateFromLCH(ColorLCH lch)
 {
     return(new ColorHSL(lch));
 }
 /// <summary>
 /// Create the nearest XYZ equivalent of an LCH color.
 /// </summary>
 /// <param name="lch">Target color in LCH space.</param>
 /// <returns>The XYZ equivalent of the LCH color.</returns>
 public static ColorXYZ CreateFromLCH(ColorLCH lch)
 {
     return(CreateFromLAB(ColorLAB.CreateFromLCH(lch)));
 }
 /// <summary>
 /// Constructs the nearest CMYK equivalent of a LCH color.
 /// </summary>
 /// <param name="lch">Target color in LCH space.</param>
 /// <returns>The CMYK equivalent of the LCH color.</returns>
 public static ColorCMYK CreateFromLCH(ColorLCH lch)
 {
     return(new ColorCMYK(lch));
 }