如何通过每种颜色的分数贡献在 n 种颜色之间进行插值?
How to interpolate between n colors by a fractional contribution for each color?
如何在 n 种颜色之间进行插值。
2种颜色的简单案例
先考虑一个更简单的情况,我们想要找到 2 种颜色的中点。
Color1 is RGB ( 255, 0, 0 ) // Red
Color2 is RGB ( 128, 128, 128 ) // Grey
解决方案是分别考虑的每个 R、G、B 之间的中点。
RGB ( 128 + 64, 128 / 2, 128 / 2 ) = RGB ( 192, 64, 64 )
由于中点刚好在两者之间,与插值成线性关系,那么可以在Color1和Color2之间插值0.25等小数点,颜色应该更接近Color1 .
RGB ( 255 - 32, 32, 32 ) = RGB ( 223, 32, 32 )
n种颜色的情况
我希望找到解决方案的情况是有 n 种颜色,其中每种颜色的分数权重总和为 1.0。
(猜测,我猜每种颜色都可以被认为是 3 维中的一个点 space 并且权重描述了插值点与每个颜色点的相对距离)
颜色插值仅为线性 RGB。
在某些情况下,我猜想可能有多个整数值是问题的解决方案,例如,如果有 n 种颜色具有相似的值。
我读到有双线性插值可能有助于解决这个问题。
一般颜色数不会超过5种,一般是2、3、4种颜色。
您的猜测将给出可接受的解决方案(是的,您需要分别对每个维度进行插值)。
问题是,颜色 space 可以用多个模型来描述,每个模型都有不同的维数。根据您选择的是 RGB、CMYK、HSL 还是任何其他异国情调的描述,插值看起来会有所不同 - 由于差异主要是美学上的,因此很难用非常专业的术语来描述它们。例如,使用 HSL 的插值将始终通过使用颜色圆在颜色之间移动。
在 Krita 手册中可以找到对使用不同颜色模型进行计算(及其带来的复杂性)的一些后果的很好描述:https://userbase.kde.org/Krita/Manual/ColorManagement
一些 Java 解决问题的代码位于此处,请注意它是使用 Scala SBT 构建的,但其 Java 代码。
https://github.com/PhilAndrew/betweenrgb
这里测试加权颜色的合并:
如何在 n 种颜色之间进行插值。
2种颜色的简单案例
先考虑一个更简单的情况,我们想要找到 2 种颜色的中点。
Color1 is RGB ( 255, 0, 0 ) // Red
Color2 is RGB ( 128, 128, 128 ) // Grey
解决方案是分别考虑的每个 R、G、B 之间的中点。
RGB ( 128 + 64, 128 / 2, 128 / 2 ) = RGB ( 192, 64, 64 )
由于中点刚好在两者之间,与插值成线性关系,那么可以在Color1和Color2之间插值0.25等小数点,颜色应该更接近Color1 .
RGB ( 255 - 32, 32, 32 ) = RGB ( 223, 32, 32 )
n种颜色的情况
我希望找到解决方案的情况是有 n 种颜色,其中每种颜色的分数权重总和为 1.0。
(猜测,我猜每种颜色都可以被认为是 3 维中的一个点 space 并且权重描述了插值点与每个颜色点的相对距离)
颜色插值仅为线性 RGB。
在某些情况下,我猜想可能有多个整数值是问题的解决方案,例如,如果有 n 种颜色具有相似的值。
我读到有双线性插值可能有助于解决这个问题。
一般颜色数不会超过5种,一般是2、3、4种颜色。
您的猜测将给出可接受的解决方案(是的,您需要分别对每个维度进行插值)。
问题是,颜色 space 可以用多个模型来描述,每个模型都有不同的维数。根据您选择的是 RGB、CMYK、HSL 还是任何其他异国情调的描述,插值看起来会有所不同 - 由于差异主要是美学上的,因此很难用非常专业的术语来描述它们。例如,使用 HSL 的插值将始终通过使用颜色圆在颜色之间移动。
在 Krita 手册中可以找到对使用不同颜色模型进行计算(及其带来的复杂性)的一些后果的很好描述:https://userbase.kde.org/Krita/Manual/ColorManagement
一些 Java 解决问题的代码位于此处,请注意它是使用 Scala SBT 构建的,但其 Java 代码。
https://github.com/PhilAndrew/betweenrgb
这里测试加权颜色的合并: