使用核心图像滤镜分割音效?

时间:2011-11-01 02:41:18

标签: iphone ios opengl-es ios5 core-image

我理解分音效果背后的原理,并且喜欢使用单个rgb通道的色彩图或色调曲线。不幸的是,目前iOS不是一个选项,因为SDK不包含这些过滤器。

我唯一提到的黑客(除了通过opengl进行渲染)是复制图像,调整高光中的色调,另一个中的阴影,以及组合它们。但是,我更喜欢一种不需要双链复合操作的简单方法。

iOS 5中任何当前可用的核心图像过滤器链都可以实现这样的效果吗?

2 个答案:

答案 0 :(得分:6)

首先应用CIFalseImage,我的效果非常相似。 选择你的深色和浅色(深蓝色和红色或橙色)。 为两种颜色创建CIColor时,将alpha设置为.5。

接下来使用CIScreenBlendMode并将过滤后的图像与原始图像混合。 它看起来像一个分裂的音调。

很快就能改变阴影和高光。

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 :(得分:3)

我一直在阅读有关如何在Photoshop中执行此操作的内容,它基本上增加了红色和绿色通道中的对比度,并在蓝色通道中降低了对比度。 (至少对于一个基本的效果 - 如果你真的用胶片做的话,你也可以得到一些非常奇怪的颜色变化!)

您可以使用一系列CIColorMatrix节点进行对比度调整。对比度基本上是((值 - 0.5)*对比度)+ 0.5。因此,例如,红色和绿色的对比度为1.5,蓝色为0.66的颜色矩阵将类似于

| 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可能会重现更复杂的转换,但其数据格式很复杂。您需要创建一个3D查找表。

CIToneCurve可以做到这一点,如果你做了3次单独的传球(或者只有2次 - 红色和绿色一次,第二次只有蓝色),然后合并结果。您将第二点设置为0.25以下,第四点设置为0.75以上的红色和绿色,而相反的设置为蓝色。