ChromaKey Javascript性能低下

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')

大家好,下面是我试图用JavaScript编写的色度键程序的代码。它真的很落后,质量也不好。我在想我该怎么做才能提高效率。我在下面发布了整个代码,但我确信问题在于代码中的while块。谢谢你的时间

  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构造函数
}; 
})(文件);