应用不同的过滤器

时间:2012-03-21 09:45:37

标签: iphone ios ios5 core-image

我想问一下,我正在使用核心图像并使用一些过滤器使用此过滤器

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

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

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

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

2 个答案:

答案 0 :(得分:7)

请记录下来:

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

您将获得分配给它们的所有过滤器名称和属性。一旦掌握了所有钥匙,就很容易。

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

答案 1 :(得分: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兼容。