Svg 如何在“feComponentTransfer类型”中使用TableValue;表「;

Svg 如何在“feComponentTransfer类型”中使用TableValue;表「;,svg,Svg,我正在学习SVG。到目前为止,它一直是伟大的,但现在我被困在颜色转移使用表值。以下是一个例子: <feFuncR type="table" tableValues="1 0 0 0"></feFuncR> 此函数将红色实心条更改为黑色。我想知道tableValues属性是如何工作的,这样我就可以自己判断颜色的变化。我找不到任何详细解释它的文章。中描述了feComponentTransfer的工作原理 type=“table”的工作原理是提供一个描述N-1个插值区域的

我正在学习SVG。到目前为止,它一直是伟大的,但现在我被困在颜色转移使用表值。以下是一个例子:

<feFuncR type="table" tableValues="1 0 0 0"></feFuncR>


此函数将红色实心条更改为黑色。我想知道
tableValues
属性是如何工作的,这样我就可以自己判断颜色的变化。我找不到任何详细解释它的文章。

中描述了
feComponentTransfer
的工作原理

type=“table”
的工作原理是提供一个描述N-1个插值区域的N个值的列表。这些值成为各个插值点的输出值(V0到V3)

你的桌子是“100”。这是4个值,指定3个插值区域的开始和结束插值值

输入值0->0.33映射到输出值V0->V1(1->0)。
输入值0.33->0.66映射到输出值V1->V2(0->0)。
输入值0.66->1.00映射到输出值V2->V3(0->0)

因此,红色的输入值1,即您所说的正在使用的值,将映射为0。这就是为什么你的红色元素变成黑色

输入值0将映射到1。输入值0.33将映射为0。输入值0.2将映射到:

Vk + (C - k/n)*n * (Vk+1 - Vk)
1  + (0.2 - (0/3)) * 3 * (0 - 1) = 0.4
其中,Vk是第一个表值(1),Vk+1是第二个表值(0)。这是因为0.2位于第一个区域(介于0和0.33之间)

下面的图表显示了输入如何映射到输出


输出
输入
1.
0
0
0.33
0.66
1.
输入
输出
1.
0
0
0

中介绍了
feComponentTransfer
的工作原理

type=“table”
的工作原理是提供一个描述N-1个插值区域的N个值的列表。这些值成为各个插值点的输出值(V0到V3)

你的桌子是“100”。这是4个值,指定3个插值区域的开始和结束插值值

输入值0->0.33映射到输出值V0->V1(1->0)。
输入值0.33->0.66映射到输出值V1->V2(0->0)。
输入值0.66->1.00映射到输出值V2->V3(0->0)

因此,红色的输入值1,即您所说的正在使用的值,将映射为0。这就是为什么你的红色元素变成黑色

输入值0将映射到1。输入值0.33将映射为0。输入值0.2将映射到:

Vk + (C - k/n)*n * (Vk+1 - Vk)
1  + (0.2 - (0/3)) * 3 * (0 - 1) = 0.4
其中,Vk是第一个表值(1),Vk+1是第二个表值(0)。这是因为0.2位于第一个区域(介于0和0.33之间)

下面的图表显示了输入如何映射到输出


输出
输入
1.
0
0
0.33
0.66
1.
输入
输出
1.
0
0
0

非常感谢您的详细回答,保罗。只是出于好奇,你在哪里读到的?你自己弄明白了吗?即使经过数小时的互联网搜索,我也找不到任何关于
tableValues
的如此详细的内容。SVG规范(在我回答的第一行链接)@NeenaVivek奇怪,我花了几秒钟的时间在互联网上搜索我在评论中发布的链接,我怀疑Michael也这么做了。@RobertLongson我很难理解“表中有n+1个值(即v0到vn),指定n个大小均匀的插值区域的起始值和结束值。”我想这句话是指图像的一个区域。这就是为什么我觉得很困惑的原因德洛,你知道答案吗?非常感谢你的详细回答,保罗。只是出于好奇,你在哪里读到的?你自己弄明白了吗?即使经过数小时的互联网搜索,我也找不到任何关于
tableValues
的如此详细的内容。SVG规范(在我回答的第一行链接)@NeenaVivek奇怪,我花了几秒钟的时间在互联网上搜索我在评论中发布的链接,我怀疑Michael也这么做了。@RobertLongson我很难理解“表中有n+1个值(即v0到vn),指定n个大小均匀的插值区域的起始值和结束值。”我想这句话是指图像的一个区域。这就是为什么我觉得很困惑的原因德洛,你知道答案吗?