灰度的离散值(0/1)

时间:2017-01-08 01:51:26

标签: svg snap.svg svg-filters

我为Snap创建了一个过滤器插件,用于返回值为(> = 0.5,> = 0.5,> = 0.5)的像素的离散值1和值(< 0.5,< 0) 0.5,小于0.5)

作为调试的辅助工具,我使用从白色到黑色的线性渐变。 enter image description here

在此渐变中,最左边的像素是(1,1,1),最右边的像素是(0,0,0),中心像素是(0.5,0.5,0.5)

因此,我希望应用的插件在中间剖析渐变,使其中的一半完全变白,而其中一半完全变黑,但我的输出返回错误的值,如下图所示:

enter image description here

正如您所看到的,大约三分之一的渐变是白色的,而三分之二是黑色而不是具有相同比例的黑色和白色。

这是我的代码:

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

我哪里出错了?

小提琴: https://jsfiddle.net/z7a49npn/1/

1 个答案:

答案 0 :(得分:3)

这是由于SVG中使用渐变和滤镜的默认颜色空间不匹配造成的:sRGB和linearRGB。如果你添加

color-interpolation-filters="sRGB"

到你的过滤元素 - 一切都应该有用。