-1

我需要根据 RGBA 值创建滤色器。我可以使用 Core Image 或 Metal Performance Shaders。Core Image 提供了一些默认过滤器。但我需要带有 RGBA 颜色代码的滤镜。是否可以创建这样的过滤器?

我试过这个,但这不是预期的结果。我期待像棕褐色色调过滤器具有不同的颜色。(过滤器应适用于整个框架)

@interface CustomFilterByColor : CIFilter

@property(nonatomic, retain) CIImage *inputImage;

@end



#import "CustomFilterByColor.h"

@implementation CustomFilterByColor

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

    });

    return kernel;
}

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

它对我有用。得到这样的结果图像

在此处输入图像描述

但这不是预期的过滤器。我期待的只是彩色滤光片。喜欢

在此处输入图像描述

希望你明白我的意思。

4

1 回答 1

0

我试过这个,对我很好。你可以给任何你想要的颜色。它将给出具有该颜色的输出图像。您也可以更改该颜色的强度。

   UIColor *color = [UIColor blueColor];
    /*
    [UIColor colorWithRed:255.0f/255.0f
                                     green:255.0f/255.0f
                                      blue:0.0f/255.0f
                                     alpha:0.4f];;*/

    CIColor *ciColor = [CIColor colorWithCGColor:color.CGColor];


    CIImage *outputImg = [CIFilter filterWithName:@"CIColorMonochrome" keysAndValues:kCIInputImageKey, frameImage, @"inputIntensity", [NSNumber numberWithFloat:0.6], @"inputColor", ciColor, nil].outputImage;
于 2019-01-26T06:03:34.257 回答