iOS如何计算两个UIColors之间的色调偏移以插入图像过滤器?

时间:2014-11-06 15:04:43

标签: ios objective-c colors hsv imagefilter

我想动态地将红色图像重新着色为用户想要的任何颜色(黑色和白色除外)。这将允许我减少图形艺术家必须做的工作量。通常我通过应用iOS色调偏移过滤器来做到这一点。这需要输入0-1.0范围内的数字来指定色调应该移动多少。

这是我的色调偏移控制当前的样子: enter image description here

我试图通过允许用户选择" final"来尝试简化流程。颜色而不是输入色调偏移数字。

对于示例

我有一个红色的基本图像,用户希望这个图像以蓝色重新着色。用户将选择蓝色,代码将计算从红色到蓝色的色调偏移偏移,然后将色调偏移滤镜应用于红色图像,生成蓝色图像。

-(float)hueShiftFromColor:(UIColor*)originalColor toDesiredColor:(UIColor*)desiredColor;

- 或 - 如果我可以使用我的代码在某个点采样像素并找到它的颜色,那么只需要所需的颜色:

-(void)applyHueShiftFilterToBaseImage:(UIImage*)baseImage desiredColor:(UIColor*)desiredColor;

如何计算两种颜色之间的色调偏移差异(假设饱和度和亮度与原始颜色保持一致)?

1 个答案:

答案 0 :(得分:1)

查看方法

- (BOOL)getHue:(CGFloat *)hue
    saturation:(CGFloat *)saturation
    brightness:(CGFloat *)brightness
         alpha:(CGFloat *)alpha

所以你可以这样做:

CGFloat hue1;
CGFloat hue2;

然后:

[color1 getHue:&hue1 saturation:nil brightness:nil alpha:nil];    
[color2 getHue:&hue2 saturation:nil brightness:nil alpha:nil];

现在您可以获得2个色调值之间的差异。

NSLog(@"hue 1 = %f; hue 2 = %f", hue1, hue2);
NSLog(@"hue shift = %f", hue1 - hue2);

这些是我使用redColorblueColor形成UIKit所获得的值:

hue 1 = 1.000000; hue 2 = 0.666667
hue shift = 0.333333

希望它有所帮助。