2016-08-18 5 views
0

イメージにフィルタを適用して新しいイメージを返す関数を書いています。私は、次のコードを書いた:目的C:CIFilterがnilイメージを返す

+ (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; 
} 

私はに実行している問題は、関数がnil写真の代わりに適用されたフィルタと1を返しているということです。面白いことに、フィルター名を@ "CIVignetteEffect"に変更しても効果があります。私は1つのフィルターがなぜ機能するのか理解できませんが、他はありません。私は次のリンクから両方のフィルタを見つけました:https://developer.apple.com/library/tvos/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/filter/ci/CIPhotoEffectTransfer

答えて

2

私はフィルタの正しい名前がCphotoEffectTransferであり、CIphotoeffectTransferではないと信じています。

+ (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

ああ、意味があります...私はタイプミスを修正しましたが、私はまだ無限のイメージを得ています。他に何が間違っているかも考えていますか? –

+0

上記の私の編集を参照してください... – dean

+0

完璧に働いた、ありがとう! –

0

はこれを試してみて、

我々はCIFilterを実装している:私はそれが動作します知っているので

このコードを試してみてください...私は過去に写真フィルタリングのためにそれを使用しています効果、詳細については

 //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]; 

複数のエフェクトを実装すると、このGitHubプロジェクトファイルを参照することができますImageFilter

この回答は一部の人にとって役に立ちます。

関連する問題