私は基本的に、「Anonymous Faces Filter Recipe」の例を iOS シミュレーターで動作させようとしています。
エラーや警告はありませんが、「CISourceOverCompositing」フィルターが期待どおりに機能していないように見えます。円は、加算ではなく破壊的に maskImage に描画されています。たとえば、5 つの顔が見つかった場合、5 つの円が描画されますが、最後の円だけが maskImage に表示されます。
各円が加算方式で maskImage に描画されるようにするにはどうすればよいですか?
マスクを作成するために使用しているコードは次のとおりです。
// Create a green circle to cover the rects that are returned.
CIImage *maskImage = nil;
for (CIFeature *f in faces){
CIVector *circleCenter = [CIVector vectorWithX:f.bounds.origin.x+f.bounds.size.width/2.0 Y:f.bounds.origin.y+f.bounds.size.height/2.0];
CGFloat circleRadius = MIN([f bounds].size.width, [f bounds].size.height)/1.5;
CIFilter *radialGradient = [CIFilter filterWithName:@"CIRadialGradient" keysAndValues:
@"inputRadius0", [NSNumber numberWithFloat:circleRadius],
@"inputRadius1", [NSNumber numberWithFloat:circleRadius+1.0f],
@"inputColor0", [CIColor colorWithRed:0.0 green:1.0 blue:0.0 alpha:1.0],
@"inputColor1", [CIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0],
@"inputCenter", circleCenter, nil];
CIImage *circleImage = [radialGradient valueForKey:@"outputImage"];
if (maskImage == nil) {
maskImage = circleImage;
} else {
maskImage = [[CIFilter filterWithName:@"CISourceOverCompositing" keysAndValues:@"inputImage", circleImage, @"inputBackgroundImage",maskImage, nil] valueForKey:@"outputImage"];
}
}