1

私は基本的に、「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"];
    }
}
4

1 に答える 1