我理解分割色调效果的原理,想要使用颜色映射或个别RGB通道的色调曲线。不幸的是,目前iOS没有包括这些滤镜,不能实现。
我找到的唯一方法(除了通过OpenGL渲染)就是复制一个图像,在一个图像中调整亮部色相,在另一个图像中调整暗部色相,然后进行合并。但是,我更喜欢一种更简单的方式,不需要两个操作链的组合。
在iOS 5中的任何当前可用的核心图像滤镜链中是否有可能实现这样的效果?
我理解分割色调效果的原理,想要使用颜色映射或个别RGB通道的色调曲线。不幸的是,目前iOS没有包括这些滤镜,不能实现。
我找到的唯一方法(除了通过OpenGL渲染)就是复制一个图像,在一个图像中调整亮部色相,在另一个图像中调整暗部色相,然后进行合并。但是,我更喜欢一种更简单的方式,不需要两个操作链的组合。
在iOS 5中的任何当前可用的核心图像滤镜链中是否有可能实现这样的效果?
CIFilter *lightDark = [CIFilter filterWithName:@"CIFalseColor"
keysAndValues: @"inputImage", helper.ciImage, nil];
[lightDark setDefaults];
CIColor *myBlue = [CIColor colorWithRed:0.0 green:0.0 blue:0.6 alpha:0.5];
CIColor *myRed = [CIColor colorWithRed:1.0 green:0.8 blue:0.0 alpha:0.5];
[lightDark setValue:myBlue forKey:@"inputColor0"];
[lightDark setValue:myRed forKey:@"inputColor1"];
CIImage *mappedImage = [lightDark valueForKey:kCIOutputImageKey];
CIFilter *screenBlend = [CIFilter filterWithName:@"CIScreenBlendMode" keysAndValues: @"inputImage", mappedImage, @"inputBackgroundImage", helper.ciImage, nil];
CIImage *finalImage = [screenBlend valueForKey:kCIOutputImageKey];
if (finalImage) imageView.image = [UIImage imageWithCIImage:finalImage orientation:orientation];
else NSLog(@"Missing our image");
| 1 0 0 -0.5 | | 1.5 0.0 0 0 | | 1 0 0 0.5 |
| 0 1 0 -0.5 | + | 0 1.5 0 0 | + | 0 1 0 0.5 |
| 0 0 1 -0.5 | | 0 0.0 0.66 0 | | 0 0 1 0.5 |
| 0 0 0 1.0 | | 0 0.0 0.0 1.0| | 0 0 0 1.0 |
CIColorCube可以实现更复杂的转换,但它的数据格式很复杂。您需要创建一个三维查找表。
如果您进行了3次单独的传递(或者可能只有2次 - 一次用于红色和绿色,第二次仅用于蓝色),然后合并结果,CIToneCurve就可以做到这一点。在红色和绿色中,您将第二个点设置为低于0.25,第四个点设置为高于0.75,在蓝色中则相反。
CIAdditionCompositing
混合这两个图像。 - user1118321