我正在开发一个应用程序,我想使用滑块更改图像的几个属性,例如亮度、对比度、饱和度、色调等(用例类似于 lightroom 工作流程,用户可以通过移动滑块来更改这些属性)。
问题:
我的问题是,这些属性不可交换。
例子
- 我将图像 I 即 B(I) 上的亮度值更改为 +30,然后将结果图像的对比度更改为 -60 即 C(B(I)),结果与 B(C(I)) 不同。
- 在上述操作C(B(I))之后,如果我尝试将亮度恢复-30来否定亮度效果,即B(C(B(I))),结果与C(I)不同。
我尝试过的方法:
我尝试了两种不同的方法,但都失败了。
- 继续将结果应用于最新图像,即如果我想再次更改亮度,我将其应用于 C(B(I)) 的结果。这显然会给出错误的结果,并且不会否定早期应用亮度的效果。
- 每当重新应用效果时,移除第一个效果。示例:如果我应用了 C(B(I)),并且再次想要更改亮度,我将删除第一个亮度效果,因此将具有 C(I),然后将结果应用于这个新结果。所以新效果看起来像 B(C(I))。这种方法的问题是,它很慢,因为一旦您更改滑块,就需要重新应用效果(因为移除了先前的效果)。如果我将滑块改回亮度(因为结果没有从 C(B(I)) 更改为 B(C(I))),它也会导致图像突然变化(非常直观)。
Lightroom 和许多其他图像处理软件实现了这一点,但我不知道如何实现,它们完美地否定了用户移动滑块时的更改,而不管应用属性的顺序如何。我不知道他们是怎么做到的,因此需要帮助。
注意:最近我想知道这是否可以通过混合(不知道哪种类型的混合)应用于原始图像的每种效果的结果来实现,而不是将它们应用于前一个的结果。