Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 不同版本的BT.601、BT.709和RGB之间的转换_Javascript - Fatal编程技术网

Javascript 不同版本的BT.601、BT.709和RGB之间的转换

Javascript 不同版本的BT.601、BT.709和RGB之间的转换,javascript,Javascript,由于颜色空间转换之前让我感到困惑,我创建了这个工具来轻松地在不同版本的BT.601、BT.709和RGB之间进行转换 但我仍然不确定是否应该使用floor或round来计算转换结果。请帮助评论,然后我将改进此工具 A601v1=[[0.257,0.504,0.098], [-0.148, -0.291, 0.439], [0.439, -0.368, -0.071]]; O601v1=[[16,128,128]]; A601v2=[[0.299,0.587,0.114], [-0.17

由于颜色空间转换之前让我感到困惑,我创建了这个工具来轻松地在不同版本的BT.601、BT.709和RGB之间进行转换

但我仍然不确定是否应该使用floor或round来计算转换结果。请帮助评论,然后我将改进此工具

A601v1=[[0.257,0.504,0.098],
[-0.148, -0.291,   0.439],
[0.439,  -0.368,  -0.071]];
O601v1=[[16,128,128]];
A601v2=[[0.299,0.587,0.114],
[-0.173, -0.339,  0.511],
[0.511,  -0.428, -0.083]];
O601v2=[[16,128,128]];
A601v3=[[0.299,0.587,0.114],
[-0.169,  -0.331,   0.500],
[0.500,  -0.419,  -0.081]];
O601v3=[[012828]];
A709v1=[[0.1826,0.6142,0.0620],
[-0.1006,  -0.3386,   0.4392],
[0.4392,  -0.3989,  -0.0403]];
O709v1=[[16,128,128]];
A709v2=[[0.2126,0.7152,0.0722],
[-0.1146,  -0.3854,   0.5000],
[0.5000,  -0.4542,  -0.0468]];
O709v2=[[012828]];
A=A601v1;
O=O601v1;
函数组合(列表){
var idx=列表中选择的索引;
var colspace=thelist.options[idx].value;
if(colspace==“BT.601v1”){
A=A601v1;
O=O601v1;
}else if(colspace==“BT.601v2”){
A=A601v2;
O=O601v2;
}else if(colspace==“BT.601v3”){
A=A601v3;
O=O601v3;
}else if(colspace==“BT.709v1”){
A=A709v1;
O=O709v1;
}else if(colspace==“BT.709v2”){
A=A709v2;
O=O709v2;
}
}    
函数yuv2rgb(f){
变量y、u、v、r、g、b、yuv、rgb、偏移量;
y=parseInt(f.y.值);
u=parseInt(f.u.值);
v=parseInt(f.v.值);
yuv=[[y,u,v]];
Ainv=数学库存(A);
yuv=数学减法(yuv,O);
rgb=数学乘法(yuv,数学转置(Ainv))
rgb=数学圆(rgb);
rgb=剪辑(rgb,0255);
r=rgb[0][0];
g=rgb[0][1];
b=rgb[0][2];
f、 红色。数值=r;
f、 green.value=g;
f、 blue.value=b;
var yuvElem=document.getElementById('yuv');
yuvElem.src=getDataUrl(r,g,b);
}
函数rgb2hex(r、g、b){
var v;
如果(g!==未定义){
v=数字(0x1000000+r*0x10000+g*0x100+b).toString(16).子字符串(1);
}否则{
v=数字(0x1000000+r[0][0]*0x10000+r[0][1]*0x100+r[0][2])。toString(16)。子字符串(1);
}
返回“#”+v;
}
功能夹(m1、低、高){
var结果=[];
对于(变量i=0;i高){
结果[i][j]=高;
}否则{
结果[i][j]=m1[i][j];
}
}
}
返回结果;
}
函数rgb2yuv(f){
变量y、u、v、r、g、b、yuv、rgb、偏移量;
r=parseInt(f.red.value);
g=parseInt(f.green.value);
b=parseInt(f.blue.value);
rgb=[[r,g,b]];
yuv=math.multiply(rgb,math.transpose(A));
yuv=math.add(yuv,O);
yuv=数学圆(yuv);
yuv=夹子(yuv,0255);
f、 y.值=yuv[0][0];
f、 u.value=yuv[0][1];
f、 v.value=yuv[0][2];
var yuvElem=document.getElementById('yuv');
yuvElem.src=getDataUrl(r,g,b);
}
函数getDataUrl(r、g、b){
var canvas=document.createElement('canvas');
var高度=100;
var宽度=100;
画布。高度=高度;
画布。宽度=宽度;
var context=canvas.getContext(“2d”);
var imageData=context.createImageData(宽度、高度);
var数据=imageData.data;

对于(var i=0;它的delta应该在1之内,所以它不重要。delta应该在1之内,所以它不重要。