ChromaKey Javascript性能低下
大家好,下面是我试图用JavaScript编写的色度键程序的代码。它真的很落后,质量也不好。我在想我该怎么做才能提高效率。我在下面发布了整个代码,但我确信问题在于代码中的while块。谢谢你的时间ChromaKey Javascript性能低下,javascript,chromakey,Javascript,Chromakey,大家好,下面是我试图用JavaScript编写的色度键程序的代码。它真的很落后,质量也不好。我在想我该怎么做才能提高效率。我在下面发布了整个代码,但我确信问题在于代码中的while块。谢谢你的时间 window.ck= (function(_d){ var _video= _d.getElementById('video'), _canvas= _d.getElementById('canvas'), _ctx= _canvas.getContext('2d')
window.ck= (function(_d){
var _video= _d.getElementById('video'),
_canvas= _d.getElementById('canvas'),
_ctx= _canvas.getContext('2d'),
_n= navigator,
_w= window,
_width= 0,
_height= 0,
_tmpCtx = _d.createElement('canvas'),
_range = 80,
_colors = [0, 0, 200];
_tmpCtx.width= _canvas.offsetWidth;
_tmpCtx.height= _canvas.offsetHeight;
_tmpCtx= _tmpCtx.getContext('2d');
var _videoPlaying= function(event){
var frame= '',
data= null,
l,
r, g, b;
if(!_width){
_width= _video.offsetWidth;
_height= _video.offsetHeight;
}
_tmpCtx.drawImage(_video, 0, 0, _width, _height);
frame= _tmpCtx.getImageData(0, 0, _width, _height);
data= frame.data;
**l= data.length/4;
while(l--){
r= data[l*4];
g= data[l*4+1];
b= data[l*4+2];
if(Math.abs(r-_colors[0]) < 250-_range
&&
Math.abs(g-_colors[1]) < 250-_range
&&
Math.abs(b-_colors[2]) < 250-_range)
{
frame.data[l*4+3]= 0;
}
}
_ctx.putImageData(frame, 0, 0);
};**
var _videoClick= function(evt){
var line= evt.offsetY,
col= evt.offsetX,
frame= _ctx.getImageData(col, line, 1, 1),
px= [frame.data[0], frame.data[1], frame.data[2]];
_colors= px;
};
var _constructor= function(){
_w.URL= _w.URL || _w.webkitURL;
_n.getUserMedia= _n.getUserMedia||_n.webkitGetUserMedia||_n.mozGetUserMedia||false;
if(_n.getUserMedia){
_n.getUserMedia({
audio: false,
video: true
}, function(stream){
try{
stream= _w.URL.createObjectURL(stream);
}catch(e){
}
_video.src= stream;
_video.play();
_canvas.addEventListener('click', _videoClick);
setInterval(_videoPlaying, 120);
_video.style.visibility= 'hidden';
_d.getElementById('range').addEventListener('change', function(){
_range= 255 - this.value;
});
}, function(){
//alert('nao permitiu');
});
}else{
alert('falhou');
}
}
return {
start: _constructor
};
})(document);
window.ck=(函数(_d){
var_video=_d.getElementById('video'),
_canvas=\u d.getElementById('canvas'),
_ctx=_canvas.getContext('2d'),
_n=导航器,
_w=窗口,
_宽度=0,
_高度=0,
_tmpCtx=_d.createElement('canvas'),
_范围=80,
_颜色=[0,0200];
_tmpCtx.width=_canvas.offsetWidth;
_tmpCtx.height=_canvas.offsetHeight;
_tmpCtx=_tmpCtx.getContext('2d');
var\u videoPlaying=函数(事件){
变量帧=“”,
数据=空,
L
r、 g,b;
如果(!\u宽度){
_宽度=_video.offsetWidth;
_高度=_video.offsetHeight;
}
_tmpCtx.drawImage(_视频,0,0,_宽度,_高度);
frame=\u tmpCtx.getImageData(0,0,宽度,高度);
data=frame.data;
**l=数据长度/4;
而(l--){
r=数据[l*4];
g=数据[l*4+1];
b=数据[l*4+2];
如果(数学abs(r-_颜色[0])<250-_范围
&&
数学abs(g-_颜色[1])<250-_范围
&&
数学abs(b-_颜色[2])<250-_范围)
{
帧数据[l*4+3]=0;
}
}
_ctx.putImageData(帧,0,0);
};**
var\u videoClick=函数(evt){
var线=evt.offsetY,
col=evt.offsetX,
frame=_ctx.getImageData(列,行,1,1),
px=[frame.data[0],frame.data[1],frame.data[2];
_颜色=px;
};
var_构造函数=函数(){
_w、 URL=_w.URL | | u w.webkitURL;
_n、 getUserMedia=_n.getUserMedia | | | n.webkitGetUserMedia | | | n.mozGetUserMedia | false;
如果(\n.getUserMedia){
_n、 getUserMedia({
音频:错,
视频:真的
},函数(流){
试试{
stream=_w.URL.createObjectURL(流);
}第(e)款{
}
_video.src=流;
_video.play();
_canvas.addEventListener('click',\u videoClick);
设置间隔(视频播放,120);
_video.style.visibility='hidden';
_d、 getElementById('range')。addEventListener('change',function(){
_范围=255-此值;
});
},函数(){
//警报(“nao许可”);
});
}否则{
警惕(“法侯”);
}
}
返回{
开始:\u构造函数
};
})(文件);