/
cmetric.ts
38 lines (35 loc) · 918 Bytes
/
cmetric.ts
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
/**
* @preserve
* Copyright 2015-2018 Igor Bezkrovnyi
* All rights reserved. (MIT Licensed)
*
* cmetric.ts - part of Image Quantization Library
*/
import { AbstractDistanceCalculator } from './distanceCalculator';
/**
* TODO: Name it: http://www.compuphase.com/cmetric.htm
*/
export class CMetric extends AbstractDistanceCalculator {
calculateRaw(
r1: number,
g1: number,
b1: number,
a1: number,
r2: number,
g2: number,
b2: number,
a2: number,
) {
const rmean = ((r1 + r2) / 2) * this._whitePoint.r;
const r = (r1 - r2) * this._whitePoint.r;
const g = (g1 - g2) * this._whitePoint.g;
const b = (b1 - b2) * this._whitePoint.b;
const dE =
(((512 + rmean) * r * r) >> 8) +
4 * g * g +
(((767 - rmean) * b * b) >> 8);
const dA = (a2 - a1) * this._whitePoint.a;
return Math.sqrt(dE + dA * dA);
}
protected _setDefaults() {}
}