Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Svg 我可以为[tableValues]上的每个值设置特定间距吗?_Svg_Svg Filters - Fatal编程技术网

Svg 我可以为[tableValues]上的每个值设置特定间距吗?

Svg 我可以为[tableValues]上的每个值设置特定间距吗?,svg,svg-filters,Svg,Svg Filters,我需要对HTML元素应用一个过滤器作为渐变贴图,并使用自定义渐变和每个颜色值之间的特定距离 把我已经做过的和我想做的事情放到图片中 假设我们有一个黑白图像。 对于一些css,我们使用下面的过滤器从黑/白映射到红/绿/蓝 <filter id="rgb_gradient"> <feComponentTransfer> <feFuncR type="table" tableValues="1 0 0&quo

我需要对HTML元素应用一个
过滤器
作为渐变贴图,并使用自定义渐变和每个颜色值之间的特定距离


把我已经做过的和我想做的事情放到图片中

假设我们有一个黑白图像。
对于一些css,我们使用下面的
过滤器
从黑/白映射到红/绿/蓝

<filter id="rgb_gradient">
  <feComponentTransfer>
    <feFuncR type="table" tableValues="1 0 0"/>
    <feFuncG type="table" tableValues="0 1 0"/>
    <feFuncB type="table" tableValues="0 0 1"/>
    <feFuncA type="table" tableValues="0 1"/>
  </feComponentTransfer>
</filter>

点A到点B将如下所示:

目前,所有三种颜色将均匀分布(红色为0%,绿色为50%,蓝色为100%)


那么,回到问题上来

我可以设置/移动(例如)绿色值从50%到82%吗

我们应该期待的是:


提前谢谢。

你一定能做到。然而,实现您想要的粒度可能是一件痛苦的事情

首先,我想看看你在做什么。对于每个组件,设置三个断点。插值将
[0,1]
输入区域平均分割,因此您将设置三个区域:
0-0.33
0.34-0.66
0.67-1
(请忽略舍入)。您正在将红色坐标映射到暗像素,因为
feFuncR
的第一个值为1,
feFuncG
feFuncB
的第一个值为零。还需要注意的是,在每个区域中,起点和终点之间都有一个插值。这就是为什么在红色和绿色之间会出现黄色像素,因为红色会褪色,绿色会变亮

因此,您可以使用相同的技巧获得更多断点的进一步控制。问题是,该算法将控制实际偏移量,因此,如果希望获得1%的错误,可能需要设置大量断点。例如,此示例将为您提供从0到0.4的红色、从0.4到0.8的绿色和从0.8到1的蓝色:

<filter id="disp" x="0" y="0" width="100%" height="100%">
  <feComponentTransfer>
    <feFuncR type="table" tableValues="1 1 0 0 0"/>
    <feFuncG type="table" tableValues="0 0 1 1 0"/>
    <feFuncB type="table" tableValues="0 0 0 0 1"/>
    <feFuncA type="table" tableValues="0 1"/>
  </feComponentTransfer>
</filter>


如您所见,您将丢失暗像素中的细节,因为值为0到0.4的每个像素都是完全红色的。你可以在偏移量中使用介于0和1之间的其他值来控制该行为。

为了增加绿色,你可以这样做
@enxaneta我很感激你的时间,但是,这不是多少颜色,而是颜色在哪里。谢谢@vqf,我考虑过了,不过我正在寻找替代方案,因为我正在处理数十个渐变,每个渐变由数十个断点组成。因此,正如你所说,这将是一个令人头痛的问题。没有其他选择,你必须添加更多断点。要获得精确的82%的100%绿色,您需要在51个成员数组中的第41个位置设置1,然后手动计算其他位置。这对于Excel来说是一项很好的任务。