Macos CIColorMap中的CIFilterGenerator故障
我正在尝试创建一个Macos CIColorMap中的CIFilterGenerator故障,macos,cocoa,core-image,cifilter,Macos,Cocoa,Core Image,Cifilter,我正在尝试创建一个CIFilterGenerator,用于使用以下代码的CALayer: CIFilterGenerator *generator = [[CIFilterGenerator alloc] init]; CIFilter *colorFilter = [CIFilter filterWithName:@"CIConstantColorGenerator"]; [colorFilter setDefaults]; [colorFilter setValue:[CIColor co
CIFilterGenerator
,用于使用以下代码的CALayer:
CIFilterGenerator *generator = [[CIFilterGenerator alloc] init];
CIFilter *colorFilter = [CIFilter filterWithName:@"CIConstantColorGenerator"];
[colorFilter setDefaults];
[colorFilter setValue:[CIColor colorWithRed:0.0 green:1.0 blue:0.0 alpha:0.5] forKey:kCIInputColorKey];
CIFilter *cropFilter = [CIFilter filterWithName:@"CICrop"];
[cropFilter setDefaults];
[cropFilter setValue:[CIVector vectorWithX:0.0 Y:0.0 Z:1.0 W:1.0] forKey:@"inputRectangle"];
[generator connectObject:colorFilter withKey:kCIOutputImageKey toObject:cropFilter withKey:kCIInputImageKey];
CIFilter *colorMap = [CIFilter filterWithName:@"CIColorMap"];
[colorMap setDefaults];
[generator connectObject:cropFilter withKey:kCIOutputImageKey toObject:colorMap withKey:kCIInputGradientImageKey];
CIFilter *blur = [CIFilter filterWithName:@"CIGaussianBlur"];
[blur setDefaults];
[blur setValue:@10.0 forKey:kCIInputRadiusKey];
[generator connectObject:colorMap withKey:kCIOutputImageKey toObject:blur withKey:kCIInputImageKey];
[generator exportKey:kCIInputColorKey fromObject:colorFilter withName:nil];
[generator exportKey:kCIInputImageKey fromObject:colorMap withName:nil];
[generator exportKey:kCIOutputImageKey fromObject:blur withName:nil];
但是,当我尝试将其附加到层时,会出现一个异常:
/SourceCache/CoreImage/CoreImage-8.2.2/API/CIFilter.mm:588: CIColorMap apply:: Caught exception: CIColorMap: colorMap: nil value for argument #0 (src)
这很奇怪,因为我正在导出颜色贴图输入图像。更奇怪的是,如果我将导出的输出图像更改为颜色贴图,它会按预期工作(当然会减去模糊)。它也会因为最小的过滤器链而失败吗?例如,仅将
CIColorMap
或CIColorMap
连接到您的colorFilter
?是。看起来,如果我将一个图像设置为输入图像(任何图像,我使用的是恒定颜色),它就可以正常工作。当过滤器应用到图层时,临时图像被替换,一切正常。但是,如果过滤器没有默认的输入图像,那么一旦您尝试访问它,它就会抛出一个异常。认为这是一个错误。