2014-02-11 12 views
5

Ich versuche, Kontrast als Filter zu KineticJS hinzuzufügen (ich weiß, es ist kein Filter technisch). Es funktioniert, aber ich möchte contrast() Modifizierer hinzufügen (wie noise() für Rauschfilter usw.).erweitern KineticJS - benutzerdefinierte Filter

Hier ist meine Funktion (nach KineticJS 5.0.1 Bibliothek einschließlich):

(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); 
})(); 

Wie Sie sehen können, Kinetic.Factory.addGetterSetter mich contrast() Modifikator bieten sollte, aber es funktioniert nicht. Wenn ich den Code ausführen, resuls ist TypeError: imgs.contrast is not a function:

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

Was mache ich falsch?

// Update
Meine temporäre Lösung: nur meine Funktion in kineticJS Datei setzen. Nicht perfekt, aber es funktioniert.

Antwort

1

Von dem, was ich aus der documentation ausmachen kann, was Sie haben, sollte funktionieren. Als ich es jedoch selbst ausprobierte, endete ich mit dem gleichen Fehler, den Sie bekommen. Aufbauend auf dieser stackoverflow answer, es sieht aus wie eine Alternative den Filter über das Config-Objekt des Kinetic Bild zu setzen:

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

Fiddle here (der Fehler mit dem Versuch anzuwenden Ihre Filter auf ein Bild von einem anderen zu tun Domain und kann, denke ich, abgezinst werden).

+1

Technisch ist Ihre Lösung in Ordnung, aber ich habe viele dynamisch hinzugefügte Objekte auf meiner Leinwand. Es ist also ziemlich schwer zu implementieren und ich denke in meinem Fall wird die Leistung nicht gut genug sein (aber ich habe keine Tests gemacht). Meine vorübergehende Lösung: Einfach die Funktion in kineticJS-Datei einfügen. Nicht perfekt, aber es funktioniert. – czachor