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

aka*_*aru 12 iphone opengl-es core-image ios ios5

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

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

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

dde*_*ntz 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");
Run Code Online (Sandbox Code Playgroud)


use*_*321 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 |
Run Code Online (Sandbox Code Playgroud)

CIColorCube 可能可以重现更复杂的转换,但其数据的格式很复杂。您需要创建一个 3D 查找表。

如果您进行 3 次单独的传递(或者可能只进行 2 次 - 一次用于红色和绿色,第二次仅用于蓝色),然后合并结果,CIToneCurve 就可以做到这一点。您可以将第二个点设置为低于 0.25,将第四个点设置为高于 0.75,用红色和绿色表示,反之以蓝色表示。