49 lines
906 B
JavaScript
49 lines
906 B
JavaScript
/**
|
|
* YUV https://en.wikipedia.org/?title=YUV
|
|
*
|
|
* @module color-space/yuv
|
|
*/
|
|
import rgb from './rgb.js';
|
|
|
|
var yuv = ({
|
|
name: 'yuv',
|
|
min: [0, -0.5, -0.5],
|
|
max: [1, 0.5, 0.5],
|
|
channel: ['Y', 'U', 'V'],
|
|
alias: ['YUV', 'EBU'],
|
|
});
|
|
|
|
yuv.rgb = function (yuv) {
|
|
var y = yuv[0],
|
|
u = yuv[1],
|
|
v = yuv[2],
|
|
r, g, b;
|
|
|
|
r = (y * 1) + (u * 0) + (v * 1.13983);
|
|
g = (y * 1) + (u * -0.39465) + (v * -0.58060);
|
|
b = (y * 1) + (u * 2.02311) + (v * 0);
|
|
|
|
r = Math.min(Math.max(0, r), 1);
|
|
g = Math.min(Math.max(0, g), 1);
|
|
b = Math.min(Math.max(0, b), 1);
|
|
|
|
return [r * 255, g * 255, b * 255];
|
|
}
|
|
|
|
|
|
//extend rgb
|
|
rgb.yuv = function (rgb) {
|
|
var r = rgb[0] / 255,
|
|
g = rgb[1] / 255,
|
|
b = rgb[2] / 255;
|
|
|
|
var y = (r * 0.299) + (g * 0.587) + (b * 0.114);
|
|
var u = (r * -0.14713) + (g * -0.28886) + (b * 0.436);
|
|
var v = (r * 0.615) + (g * -0.51499) + (b * -0.10001);
|
|
|
|
return [y, u, v];
|
|
};
|
|
|
|
|
|
export default yuv;
|