在iOS中的AVCaptureDevice上添加过饱和度效果

时间:2016-07-28 13:20:50

标签: ios objective-c swift cifilter avcapturedevice

我已将自定义相机应用到我的应用中。所以,我正在使用AVCaptureDevice创建此相机。此外,我还使用此Set GrayScale on Output of AVCaptureDevice in iOS在此自定义相机上设置了GrayScale。

现在我想在相机上添加过饱和度效果。 “过饱和度提示”应根据提供的公式计算。 (将过曝光像素(R,G,B> = 255)转换为黄色(RGB 255,255,0))。

我想要在下面的图片中显示的确切效果。

enter image description here

我使用以下代码创建GrayScale: -

let sepiaColor = CIColor(
    red: 1.0 / 0.30078125,
    green: 1.0 / 0.5859375,
    blue: 1.0 / 0.11328125
)

filter = CIFilter(
    name: "CIColorMonochrome",
    withInputParameters: [
        "inputColor" : sepiaColor,
        "inputIntensity" : 1.0
    ]
)

如何使用CIFilter创建此过饱和效果。?我查看了CIFilter的{​​{3}}文档。但是没有想到如何使用它来创建这种效果。也许 CIColorCrossPolynomialCIColorMap正在为此工作。

有没有办法在AVCaptureDevice上创建此效果。?

任何帮助将不胜感激。 :)

1 个答案:

答案 0 :(得分:1)

你的逻辑/算法:

  

(将过度曝光像素(R,G,B> = 255)转换为黄色(RGB 255,255,0))

将进入内核,这实际上是你想对每个像素执行的计算。

这是我写的一个简单的过滤器。在内核的if条件中,编写自己的条件。 然后部分已经将像素转换为(255,255,0)。

<强>·H

#import <CoreImage/CoreImage.h>

@interface CustomFilter : CIFilter

@property(nonatomic, retain) CIImage *inputImage;

-(CIImage*)outputImage;

@end

<强>的.m

#import "CustomFilter.h"

@implementation CustomFilter

-(CIColorKernel*)myKernel
{
    static CIColorKernel *kernel = nil;
    static dispatch_once_t once;
    dispatch_once(&once, ^{
        kernel = [CIColorKernel kernelWithString:
                  @"kernel vec4 CustomFilter ( __sample s ) \n { \n if ( s.r + s.g + s.b < 0.1 ) \n { return s.rgba = vec4(1.0, 1.0, 0.0, 1.0); } \n else \n { return s.rgba; } \n }"];
    });

    return kernel;
}

-(CIImage*)outputImage
{
    CGRect dod = _inputImage.extent;
    return [[self myKernel] applyWithExtent:dod arguments:@[_inputImage]];
}

@end