2014-02-11 125 views
5

我想添加对比度作为过滤器KineticJS(我知道,它不是技术上的过滤器)。它的工作原理,但我也想添加contrast()修改器(如noise()噪声滤波器等)。延伸KineticJS - 自定义筛选器

这里是我的功能(包括KineticJS 5.0.1库后):

(function() { 

    Kinetic.Filters.Contrast = function(imageData) { 
     var data = imageData.data, 
      len = data.length, 
      i, 
      adjust = this.contrast(), 
      x = []; 

      //[cut] processing, not important here 
    }; 

    Kinetic.Factory.addGetterSetter(Kinetic.Node, 'contrast', 0, null, Kinetic.Factory.afterSetFilter); 
})(); 

正如你所看到的,Kinetic.Factory.addGetterSetter应该提供我contrast()修改,但事实并非如此。当我运行代码时,结果是TypeError: imgs.contrast is not a function

imgs.filters([Kinetic.Filters.Contrast]); 
imgs.contrast(30); 

我在做什么错?

//更新
我的临时解决方案:只需将我的函数放入kineticJS文件。不完美,但它的工作原理。

回答

1

从我能从documentation中得出的结果,你应该有什么工作。但是,当我自己尝试时,我最终得到了同样的错误。借鉴这一stackoverflow answer,它看起来像一个替代方案是通过动力学图像的配置对象设置过滤器:

var myImg = new Kinetic.Image({ 
     image: imageObj, 
     filter: Kinetic.Filters.Contrast 
    }); 

小提琴here(错误是试图筛选器从另一个应用到图像做域名,我认为可以打折)。

+1

从技术上讲,您的解决方案是可以的,但我的画布上有很多动态添加的对象。所以这很难实现,我认为对我来说性能不够好(但我没有做任何测试)。我的临时解决方案:只需将该函数放入kineticJS文件。不完美,但它的工作原理。 – czachor