2017-01-08 2 views
1

Ich habe ein Filter-Plug-in für Snap erstellt, das diskrete Werte 1 für Pixel mit Werten (> = 0,5,> = 0,5,> = 0,5) und 0 für Werte zurückgeben soll (< 0,5, < 0,5, < 0,5)Diskrete Werte (0/1) von Graustufen

Als Hilfe zum Debuggen verwende ich einen linearen Farbverlauf von weiß nach schwarz. enter image description here

In diesem Gradienten, am weitesten links gelegene Pixel (1,1,1), ist am weitesten rechts liegenden Pixel (0,0,0) und den Mittelpixel (0.5,0.5,0.5)

deshalb erwartete ich das angelegte Plugin die Gradienten in der Mitte sezieren vollständig weiß die Hälfte davon zu verlassen, und die Hälfte davon völlig schwarz, doch meine Ausgabe liefert die falschen Werte, wie unten in der Abbildung dargestellt:

enter image description here

Wie Sie sehen können, ist etwa ein Drittel der Steigung weiß, und zwei Drittel sind schwarz, anstatt zu haben ein gleicher Anteil von Schwarz und Weiß.

Hier ist mein Code:

Snap.filter.discrete()

Snap.filter.discrete = function() { 
    var str = "0 1" 
    return Snap.format('<feComponentTransfer>' + 
    '<feFuncR type="discrete" tableValues="' + str + '"/>' + 
    '<feFuncG type="discrete" tableValues="' + str + '"/>' + 
    '<feFuncB type="discrete" tableValues="' + str + '"/>' + 
    '</feComponentTransfer>'); 
}; 

Wo habe ich falsch gemacht?

Fiddle: sRGB und linearRGB jeweils: https://jsfiddle.net/z7a49npn/1/

Antwort

3

Dies wird durch eine Fehlanpassung zwischen den Gradienten und für Filter in SVG verwendet Standardfarbräumen verursacht wird. Wenn Sie Ihr Filterelement

hinzufügen, sollte alles funktionieren.

+0

Es funktionierte für mich! Das habe ich nicht erwartet !! Du hast Jahre in meinem Leben hinzugefügt. Vielen Dank! –

Verwandte Themen