【问题标题】:applying different filters应用不同的过滤器
【发布时间】:2012-04-05 19:37:13
【问题描述】:

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

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

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

【问题讨论】:

  • 您能更详细地描述您遇到的问题吗?当它崩溃时,您会收到什么错误消息?您在使用其他过滤器时遇到什么问题?

标签: iphone ios ios5 core-image


【解决方案1】:

只需记录一下:

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

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

例如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];

【讨论】:

    【解决方案2】:

    其中一些(但并非所有)过滤器在 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 兼容,如果这很重要的话。

    【讨论】:

    • 我想申请核心图像类
    • 就像我如何应用不同的过滤器一样简单,就像在 civector 中应该使用什么值
    猜你喜欢
    • 2020-02-27
    • 2017-05-09
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 2012-06-06
    • 2021-06-16
    相关资源
    最近更新 更多