CIGaussianBlur и CIAffineClamp на iOS 6

Я пытаюсь размыть изображение с помощью CoreImage на iOS 6 без заметной черной рамки. В документации Apple говорится, что с помощью фильтра CIAffineClamp можно добиться этого, но я не могу получить выходное изображение из фильтра. Вот что я попробовал, но, к сожалению, при доступе к [fixFilter 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);

1 ответ

Решение

Фильтр CIAffineClamp устанавливает ваш экстент как бесконечный, что затем смешивает ваш контекст. Попробуйте сохранить CGRect экстента перед зажимом, а затем передать его инициализатору контекста.

Другие вопросы по тегам