2017-01-08 16 views
1

スナップ用のフィルタプラグインを作成しました。これは、値が(> = 0.5、> = 0.5、> = 0.5)、値が0のピクセルの場合は離散値1を返します(< 0.5,< 0.5,< 0.5)グレースケールの離散値(0/1)

私は、白から黒までの線形グラデーションを使用しています。この勾配enter image description here

、最も左のピクセルが(1,1,1)であり、最も右のピクセルが(0,0,0)であり、中央の画素が(0.5,0.5,0.5)

でありますしたがって、私はそれの半分を残して途中で勾配を分析するために適用されるプラグインが完全に白期待され、その半分は完全に黒、まだ次の画像に示すように、私の出力が間違った値を返す:

enter image description here

ご覧のとおり、約3分の1のグラデーションは白で、2/3は黒ではなく黒と白の等しい割合。ここで

は私のコードです:

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

フィドル:それぞれのsRGBとlinearRGB: https://jsfiddle.net/z7a49npn/1/

答えて

3

これは、SVGでグラデーションやフィルタに使用されるデフォルトの色空間の間の不整合によって引き起こされます。

color-interpolation-filters="sRGB" 

をフィルタ要素に追加すると、すべてが機能します。

+0

それは私のために働いた!私はそれを期待していなかった!あなたは私の人生に何年もかかった。ありがとうございました! –