# All files / fast-colors/src color-lch.ts

45.45% Statements 5/11
0% Branches 0/9
20% Functions 1/5
45.45% Lines 5/11

Press n or j to go to the next uncovered block, b, p or k for the previous block.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    445x

    5x

    5888x
    5888x
    5888x

     import { roundToPrecisionSmall } from "./math-utilities";

    // CIELCH color space
    // https://en.wikipedia.org/wiki/CIELAB_color_space
    // This is a cylindrical representation of the CIELAB space useful for saturation operations
    // This uses Hue values in "degree" format. So expect a range of [0,360]. Some other implementations instead uses radians or a normalized Hue with range [0,1]. Be aware of this when checking values or using other libraries.
    // This implementation uses the D65 constants for 2 degrees. That determines the constants used for the pure white point of the XYZ space of 0.95047, 1.0, 1.08883.
    // https://en.wikipedia.org/wiki/Illuminant_D65
    // These constants determine how the XYZ, LCH and LAB colors convert to/from RGB.
    export class ColorLCH {
        public static fromObject(data: { l: number; c: number; h: number }): ColorLCH | null {
            if (data && !isNaN(data.l) && !isNaN(data.c) && !isNaN(data.h)) {
                return new ColorLCH(data.l, data.c, data.h);
            }
            return null;
        }

        constructor(l: number, c: number, h: number) {
            this.l = l;
            this.c = c;
            this.h = h;
        }

        public readonly l: number;
        public readonly c: number;
        public readonly h: number;

        public equalValue(rhs: ColorLCH): boolean {
            return this.l === rhs.l && this.c === rhs.c && this.h === rhs.h;
        }

        public roundToPrecision(precision: number): ColorLCH {
            return new ColorLCH(
                roundToPrecisionSmall(this.l, precision),
                roundToPrecisionSmall(this.c, precision),
                roundToPrecisionSmall(this.h, precision)
            );
        }

        public toObject(): { l: number; c: number; h: number } {
            return { l: this.l, c: this.c, h: this.h };
        }
    }