2014-02-11 124 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