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)
カラーマップの入力画像をエクスポートしているので、これは奇妙です。さらに奇妙なのは、エクスポートされた出力イメージをカラー マップに変更すると、期待どおりに機能することです (もちろん、ぼかしを除く)。