9

iOS 6 で CoreImage を使用して、目立つ黒い境界線がないように画像をぼかしようとしています。Apple のドキュメントには、CIAffineClamp フィルターを使用するとこれを実現できると記載されていますが、フィルターから出力画像を取得できません。試してみたのはこちらですが、残念ながら[clampFilter outputImage]にアクセスすると空の画像が作成されてしまいます。ぼかしのみを実行すると、画像が生成されますが、境界線が暗くなります。

CIImage *inputImage = [[CIImage alloc] initWithCGImage:self.CGImage];

CIContext *context = [CIContext contextWithOptions:nil];

CGAffineTransform transform = CGAffineTransformIdentity;

CIFilter *clampFilter = [CIFilter filterWithName:@"CIAffineClamp"];
[clampFilter setValue:inputImage forKey:kCIInputImageKey];
[clampFilter setValue:[NSValue valueWithBytes:&transform objCType:@encode(CGAffineTransform)] forKey:@"inputTransform"];

CIImage *outputImage = [clampFilter outputImage];

CIFilter *blurFilter = [CIFilter filterWithName:@"CIGaussianBlur"
     keysAndValues:kCIInputImageKey, outputImage, @"inputRadius", [NSNumber numberWithFloat:radius], nil];

outputImage = [blurFilter outputImage];

CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]];
UIImage *blurredImage = [UIImage imageWithCGImage:cgimg];
CGImageRelease(cgimg);
4

1 に答える 1

15

CIAffineClamp フィルターは範囲を無限に設定しているため、コンテキストが混乱します。クランプ前のエクステント CGRect を保存してから、それをコンテキスト初期化子に提供してみてください。

于 2012-11-07T09:03:05.737 に答える