2012-10-16 12 views
9

Sto cercando di sfocare un'immagine utilizzando CoreImage su iOS 6 senza avere un bordo nero evidente. Apple documentation afferma che l'utilizzo di un filtro CIAffineClamp può raggiungere questo obiettivo ma non riesco a ottenere un'immagine di output dal filtro. Ecco cosa ho provato, ma sfortunatamente un'immagine vuota viene creata quando accedo a [clampFilter outputImage]. Se eseguo solo la sfocatura, viene prodotta un'immagine, ma con il bordo scuro all'interno.CIGaussianBlur e CIAffineClamp su iOS 6

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); 

risposta

14

Il filtro CIAffineClamp imposta l'estensione come infinita, che quindi confonde il contesto. Prova a salvare l'estensione pre-clamp di CGRect e quindi a fornirlo all'inizializzatore di contesto.

+4

contextRect era il problema. In realtà l'ho risolto modificando questa riga per utilizzare l'estensione inputImage durante la creazione di CGImage alla fine: 'CGImageRef cgimg = [context createCGImage: outputImage fromRect: inputImage.extent];' – bryguy1300