2012-03-21 49 views
1

我想问一下,我现在用的核心形象和应用一些过滤器使用此过滤器应用不同的过滤器

filter = [CIFilter filterWithName:@"CIVignette" 
            keysAndValues: kCIInputImageKey, beginImage, 
         @"inputIntensity", [NSNumber numberWithFloat:0.8], nil]; 
    CIImage *outputImage = [filter outputImage]; 

但我婉知道我是如何实现其他过滤器我试过,但应用程序崩溃,所以我想申请像这些过滤器内置在我chech使用日志

CISourceOutCompositing, 
    CISourceOverCompositing, 
    CIStraightenFilter, 
    CIStripesGenerator, 
    CITemperatureAndTint, 
    CIToneCurve, 
    CIVibrance, 
    CIVignette, 
    CIWhitePointAdjust 

现在我想申请这些过滤器。我应该使用哪些方法?

+1

你能更详细地描述你遇到的问题吗?当它崩溃时,你会得到什么错误信息?其他过滤器有什么问题? – user1118321 2012-03-21 23:33:43

回答

1

某些(但不是全部)这些过滤器在iOS上不可用。我花了一段时间才注意到这一点。

如果你看看:

https://developer.apple.com/library/mac/#documentation/graphicsimaging/reference/CoreImageFilterReference/Reference/reference.html

,在iOS5的工作,会说:“可在Mac OS X v10.4及更高版本和iOS中5.0及更高版本。”该过滤器,但很多他们只是说“在Mac OS X v10.4中可用”。如果您尝试链接多个CoreImage过滤器,并且其中一个过滤器不可用,那么您将无法从其中一个过滤器返回结果。过滤器不可用时的CoreImage行为是返回nil。

作为一个侧面说明,GPUImage(https://github.com/BradLarson/GPUImage)可能会做你正在寻找的东西。它可以将滤镜应用于UIImage或更改来自相机的实时流,并且它与iOS4兼容(如果有的话)。

+0

我想申请核心图像类 – 2012-03-22 07:18:11

+0

像我如何应用不同的过滤器简单就是像如何在civector应该是什么值 – 2012-03-22 07:19:00

7

只需登录此:

NSArray *properties = [CIFilter filterNamesInCategory: 
          kCICategoryBuiltIn]; 
    NSLog(@"%@", properties); 
    for (NSString *filterName in properties) { 
     CIFilter *fltr = [CIFilter filterWithName:filterName]; 
     NSLog(@"%@", [fltr attributes]); 
    } 

,你会得到所有的过滤器的名称和需要分配给它们的属性。一旦你拥有了所有的钥匙,这很容易。

e.g.log O/P -

CIAttributeFilterDisplayName = Vibrance; 
    CIAttributeFilterName = CIVibrance; 
    inputAmount =  { 
     CIAttributeClass = NSNumber; 
     CIAttributeDefault = 0; 
     CIAttributeIdentity = 0; 
     CIAttributeMax = 1; 
     CIAttributeMin = "-1"; 
     CIAttributeSliderMax = 1; 
     CIAttributeSliderMin = "-1"; 
     CIAttributeType = CIAttributeTypeScalar; 
    }; 
    inputImage =  { 
     CIAttributeClass = CIImage; 
     CIAttributeType = CIAttributeTypeImage; 
    }; 

从这里就可以计算出,对于过滤器CIVibrance你有钥匙inputAmount。 你可以这样写:

CIFilter* filter = [CIFilter filterWithName:@"CIVibrance" 
            keysAndValues:kCIInputImageKey,beginImage,@"inputAmount",[NSNumber numberWithFloat:0.8], nil];