2016-08-18 1 views
0

J'écris une fonction qui va appliquer un filtre à une image et retourner la nouvelle image. J'ai écrit le code suivant:Objectif C: CIFilter renvoyant une image nulle

+ (UIImage*)applyFilter:(UIImage*) photo { 
    CIImage *image = [[CIImage alloc] initWithCGImage:photo.CGImage]; 
    CIFilter *filter = [CIFilter filterWithName:@"CIphotoEffectTransfer" 
            keysAndValues: kCIInputImageKey, image, 
         @"inputIntensity", @0.8, nil]; 
    CIImage *outputImage = [filter outputImage]; 

    UIImage* newPhoto = [self imageFromCIImage:outputImage]; 
    return newPhoto; 
} 

Le problème que je suis en cours d'exécution en est que la fonction retourne une photo nul au lieu d'un avec un filtre appliqué. Intéressant, si je change le nom de filtre à @ "CIVignetteEffect" cela fonctionnera. Je ne comprends pas pourquoi un filtre fonctionne mais pas l'autre. J'ai trouvé les deux filtres à partir du lien suivant: https://developer.apple.com/library/tvos/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/filter/ci/CIPhotoEffectTransfer

Répondre

2

Je crois que le nom correct du filtre est CIPhotoEffectTransfer, pas CIphotoeffectTransfer.

Essayez ce code ... Je l'ai utilisé pour le filtrage de photo dans le passé donc je sais que cela fonctionne:

+ (UIImage*)applyFilter:(UIImage*) photo { 
UIImageOrientation orientation = photo.imageOrientation; 
CIImage* image = [CIImage imageWithCGImage:photo.CGImage]; 
CIContext *context = [CIContext contextWithOptions:nil]; 
CIFilter *filter = [CIFilter filterWithName:@"CIPhotoEffectTransfer"]; 
[filter setValue:image forKey:kCIInputImageKey]; 
CIImage *outputImage = [filter outputImage]; 
CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]]; 
UIImage *newPhoto = [UIImage imageWithCGImage:cgimg scale:1.0 orientation:orientation]; 
CGImageRelease(cgimg); 
context = nil; 
return newPhoto; 

}

+0

Ahh ça a du sens ... J'ai corrigé la faute de frappe, mais je reçois toujours une image nulle. Avez-vous des idées sur ce qui pourrait être faux? –

+0

Voir mon édition ci-dessus ... – dean

+0

A travaillé parfaitement, merci! –

0

Try This,

Nous avons mis en œuvre CIFilter effets,

 //CIVignette Effect 

     CIContext *imageContext = [CIContext contextWithOptions:nil]; 
     CIImage *image = [[CIImage alloc] initWithImage:inputimage]; 

     CIFilter *vignette = [CIFilter filterWithName:@"CIVignette"]; 
     [vignette setDefaults]; 
     [vignette setValue: image forKey: @"inputImage"]; 
     [vignette setValue: [NSNumber numberWithFloat: 1.0] forKey: @"inputIntensity"]; 
     [vignette setValue: [NSNumber numberWithFloat: 10.00 ] forKey: @"inputRadius"]; 
     CIImage *result = [vignette valueForKey: @"outputImage"]; 
     CGImageRef cgImageRef = [imageContext createCGImage:result fromRect:[result extent]]; 
     UIImage *targetImage = [UIImage imageWithCGImage:cgImageRef]; 

Pour les détails mise en œuvre de l'effet multiple, vous pouvez vous référer à ce fichier de projet GitHub ImageFilter

Espérons que cette réponse aidera pour quelqu'un.