CGaussianBlur и CIAffineClamp на iOS 6

Я пытаюсь размыть изображение с помощью CoreImage на iOS 6 без заметной черной рамки. Документация 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);

person bryguy1300    schedule 16.10.2012    source источник


Ответы (1)


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

person schimonster    schedule 07.11.2012
comment
Проблема была в contextRect. Я фактически исправил это, изменив эту строку, чтобы использовать экстент inputImage при создании CGImage в конце: CGImageRef cgimg = [context createCGImage:outputImage fromRect:inputImage.extent]; - person bryguy1300; 20.01.2013