我正在开发一个iOS应用程序,用户可以通过触摸图像的一部分(比如茶杯)来改变其颜色。我使用洪水填充算法来填充颜色,这样用户就必须点击茶杯才能改变它的颜色,这个功能正常工作。但是,最终的颜色看起来与替换颜色有些不同。我遇到了一些问题,无法找到更好的逻辑来将对象(茶杯)的颜色转换为所选颜色,考虑到饱和度和亮度。
我使用以下逻辑来获取结果颜色。我将颜色表示为(色调,饱和度,价值)的形式。
我使用以下逻辑来获取结果颜色。我将颜色表示为(色调,饱和度,价值)的形式。
touchedColor = (tchd_h, tchd_s, tchd_v); // I am not using this now
pixelColor = (old_h, old_s, old_v);
replacementColor = (new_h, new_s, new_v);
resultColor = (new_h, new_s, old_v);
pixelColor = resultColor;
涂漆前的杯子(用红色圈出)。
所选的替换颜色。
涂漆后的杯子(用红色圈出)。
请看上面的最终图像。由于我只改变了色相和饱和度,而没有改变像素颜色的明度,因此应用的颜色看起来与所选的替换颜色不太相似。图像的亮度保持不变。
如果我像这样同时改变明度、色相和饱和度,
resultColor = (new_h, new_s, new_v);
pixelColor = resultColor;
然后,杯子变成了平面的颜色,失去了光影效果,就像这样:
我想得到一些想法来调整上述逻辑,使像素颜色变成匹配的替代颜色。也许有一些公式可以得出饱和度和明度。