我需要基于RGBA值创建滤色器。我对Core Image或Metal Performance Shaders都很好。核心映像提供一些默认过滤器。但是我需要使用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]];
}
它为我工作。得到这样的结果图像
但这不是预期的过滤器。我期待的只是彩色滤光片。喜欢
希望你明白我的意思。
答案 0 :(得分: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;