基本上,我想要做的是理解如何计算沿着'曲线'的值,如photoshop曲线框中所示:

因此,给定N点,其中x在0和1之间,y在0和1之间 - 我们将创建一条穿过所有这些点的曲线.鉴于此曲线,我希望能够计算任何给定X的曲线的所有值.
换句话说,我想像曲线框那样修改颜色值,但是以编程方式.
我已经读过这些是"catmull-rom splines" - 但我看到的只是一个依赖于参数T的函数 - 我希望能够查找x的值.如果可能的话,我想在C中这样做
此代码似乎与Photoshop的曲线完全匹配(不是我的代码):http: //www.developpez.net/forums/d331608-3/autres-langages/algorithmes/contribuez/image-interpolation-spline-cubique/#post3513925
使用Catmull-Rom Spline是因为它是一种表示曲线的样条,您可以在其中添加控制点并细化曲线本身(这是您在 Photoshop 上单击添加新点时所做的),具有特殊性让曲线经过您指定的每个控制点。
在任何情况下,您只需要一个函数,该函数采用一个值(0..1 中的浮点数或 0..255 中的整数或您拥有的任何颜色空间)将产生另一个值。
float fun(float x) {
y = /* something */
return y;
}
Run Code Online (Sandbox Code Playgroud)
这当然可以通过任何类型的函数来完成。最基本的一个是默认的,它是一个恒等函数
float fun(float x) {
y = x;
return y;
}
Run Code Online (Sandbox Code Playgroud)
任何其他函数都可以用曲线计算,它可以但是开发起来更复杂,我建议你从简单的例子开始,比如贝塞尔曲线。无论如何使用t参数,因为这些是参数曲线,在深入开发之前,您需要了解一些曲线的数学背景,请看这里。