2014-02-11 3 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() модификатор, но это не делает. Когда я запускаю код, resuls является TypeError: imgs.contrast is not a function:

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

Что я делаю неправильно?

// обновление
Мое временное решение: просто поставить свою функцию в kineticJS файл. Не идеально, но он работает.

ответ

1

Из чего я могу разобраться в documentation, то, что у вас есть, должно работать. Однако, когда я сам это пробовал, у меня была та же ошибка, что и вы. Опираясь на этот stackoverflow answer, это выглядит как альтернатива, чтобы установить фильтр по конфигурации объекта Kinetic изображения:

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

Скрипки here (ошибка связана с попыткой применить фильтр к изображению от другого домен и может, я думаю, быть дисконтированным).

+1

Технически, ваше решение в порядке, но у меня на моем холсте много динамически добавленных объектов. Так что это довольно сложно реализовать, и я думаю, что в моем случае производительность будет недостаточной (но я не делал никаких тестов). Мое временное решение: просто поместите функцию в файл kineticJS. Не идеально, но он работает. – czachor

Смежные вопросы