rgb2xyz.ts 765 Bytes
/**
 * @preserve
 * Copyright 2015-2016 Igor Bezkrovnyi
 * All rights reserved. (MIT Licensed)
 *
 * rgb2xyz.ts - part of Image Quantization Library
 */
function correctGamma(n : number) {
    return n > 0.04045 ? Math.pow((n + 0.055) / 1.055, 2.4) : n / 12.92;
}

export function rgb2xyz(r : number, g : number, b : number) : { x : number; y : number; z : number } {
    // gamma correction, see https://en.wikipedia.org/wiki/SRGB#The_reverse_transformation
    r = correctGamma(r / 255);
    g = correctGamma(g / 255);
    b = correctGamma(b / 255);

    // Observer. = 2°, Illuminant = D65
    return {
        x : r * 0.4124 + g * 0.3576 + b * 0.1805,
        y : r * 0.2126 + g * 0.7152 + b * 0.0722,
        z : r * 0.0193 + g * 0.1192 + b * 0.9505
    }
}