Emp*_*ack 8 image-manipulation colors image-processing objective-c ios
我正在开发一个iOS应用程序,用户可以通过触摸它来更改图像颜色的一部分,例如茶杯.我正在使用Floodfill算法填充颜色,以便用户必须点击Tea Cup来改变颜色.这工作正常.但是,最终颜色看起来与替换颜色略有不同.考虑到饱和度和亮度,我有一些问题需要找到一个更好的逻辑来将对象的(茶杯)颜色转换为所选的颜色.
我使用以下逻辑来获取结果颜色.我将颜色表示为(色调,饱和度,值).
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;
Run Code Online (Sandbox Code Playgroud)
绘画前的杯子(用红色圈出).

选中的replacementColor.

绘制替换颜色后的杯子(用红色圈出).

见上面的最终图片.正如我刚才只改变色相和饱和度,而不是价值的的pixelColor,应用的颜色不类似于选定replacementColor.图像的亮度保持不变.
如果我改变值连同色调和饱和度这样的,
resultColor = (new_h, new_s, new_v);
pixelColor = resultColor;
Run Code Online (Sandbox Code Playgroud)
然后杯子变成扁平的颜色,错过了这样的灯光和阴影,

我想要一些想法来调整上面的逻辑,将像素颜色更改为匹配的替换颜色.可能是一些公式来推导饱和度和价值.
在您的示例中,我们将粉红色称为“要替换的颜色”,将棕色称为“替换颜色”。对于目标中的每个像素,找到源中对应的像素。查看它与“要替换的颜色”有何不同。现在对“替换颜色”进行类似的调整,并将其用作当前输出像素的颜色。
例如,如果当前源像素比要替换的颜色暗 5 个“v”单位,则将输出像素设置为暗 5 个“v”单位的替换颜色。(您还想对色调和饱和度进行相同的调整。)
您可能需要限制调整的颜色范围,以免将其他对象变成不同的颜色。
| 归档时间: |
|
| 查看次数: |
1121 次 |
| 最近记录: |