美文网首页
Core Image编程指南翻译五(查询滤镜系统)

Core Image编程指南翻译五(查询滤镜系统)

作者: 酒茶白开水 | 来源:发表于2018-12-05 18:02 被阅读0次

    示例代码下载

    查询滤镜系统

    Core Image提供的方法允许您在系统中查询可用的内置滤镜以及有关每个滤镜的显示名称,输入参数,参数类型,默认值等相关信息。查询系统可为您提供有关可用滤镜的最新信息。如果您的应用支持让用户选择和设置滤镜,则可以在为滤镜创建用户界面时使用此信息。

    获取滤镜和属性列表

    使用filterNamesInCategory:和filterNamesInCategories:方法可以准确发现哪些滤镜可用。滤镜以使列表的形式被分类更易于管理。如果您知道滤镜类别,则可以通过调用方法filterNamesInCategory:并提供表4-1,表4-2或表4-3中列出的类别常量之一来找到该类别可用的滤镜。

    如果要查找类别列表的所有可用滤镜,可以调用该方法filterNamesInCategories:,提供表中列出的类别常量数组。该方法返回一个NSArray填充了每个类别的滤镜名称的对象。您可以通过提供nil而不是类别常量数组来获取所有类别的所有滤镜的列表。

    滤镜可以是多个类别的成员。类别可以指定:

    • 滤镜产生的效果类型(颜色调整,扭曲等)。请参阅表4-1。
    • 滤镜的使用(静止图像,视频,高动态范围等)。请参阅表4-2。
    • 滤镜是否由Core Image(内置)提供。请参阅表4-3。

    表4-1 效果类型的滤镜类别常量

    效果类型 说明
    kCICategoryDistortionEffect 扭曲效果,如凹凸,旋转,洞
    kCICategoryGeometryAdjustment 几何调整,如仿射变换,裁剪,透视变换
    kCICategoryCompositeOperation 合成,例如source over,minimum,source atop,color dodge blend mode
    kCICategoryHalftoneEffect 半色调效果,如屏幕,线条屏幕,阴影线
    kCICategoryColorAdjustment 颜色调整,如伽马调整,白点调整,曝光
    kCICategoryColorEffect 色彩效果,如色调调整,张贴
    kCICategoryTransition 图像之间的过渡,例如溶解,与面具分解,滑动
    kCICategoryTileEffect 平铺效果,如平行四边形,三角形
    kCICategoryGenerator 图像生成器,如条纹,恒定颜色,棋盘格
    kCICategoryGradient 渐变,如轴向,径向,高斯
    kCICategoryStylize 风格化,例如像素化,结晶
    kCICategorySharpen 锐化,亮度
    kCICategoryBlur 模糊,如高斯,变焦,运动

    表4-2 滤镜用法的滤镜类别常量

    使用 指示
    kCICategoryStillImage 可用于静止图像
    kCICategoryVideo 可用于视频
    kCICategoryInterlaced 可用于隔行扫描图像
    kCICategoryNonSquarePixels 可用于非方形像素
    kCICategoryHighDynamicRange 可用于高动态范围像素

    表4-3 滤镜来源的滤镜类别常量

    过滤原点 指示
    kCICategoryBuiltIn Core Image提供的滤镜

    获取滤镜名称列表后,可以通过创建CIFilter对象并按attributes如下方式调用方法来检索滤镜的属性:

    CIFilter * myFilter = [CIFilter filterWithName:@“<#Filter Name Here#>”];
    NSDictionary * myFilterAttributes = [myFilter attributes];
    

    您将字符串“ <# Filter Name Here #>” 替换为您感兴趣的滤镜的名称。属性包括名称,类别,类,最小值和最大值。有关可返回的属性的完整列表,请参阅CIFilter类参考。

    构建滤镜字典

    如果您的应用提供了用户界面,则可以查阅滤镜字典以创建和更新用户界面。例如,布尔值的滤镜属性需要一个复选框或类似的用户界面元素,并且在一个范围内连续变化的属性可以使用滑块。您可以使用最大值和最小值作为文本标签的基础。默认属性设置将指示用户界面中的初始设置。

    滤镜名称和属性提供了构建用户界面所需的所有信息,允许用户选择滤镜并控制其输入参数。滤镜的属性告诉您滤镜具有多少输入参数,参数名称,数据类型以及最小值,最大值和默认值。

    注意: 如果您对构建Core Image滤镜的用户界面感兴趣,请参阅IKFilterUIView类参考,该参考提供包含Core Image滤镜的输入参数控件的视图。

    清单4-1显示了获取滤镜名称并按功能类别构建滤镜字典的代码。代码在- kCICategoryGeometryAdjustment,kCICategoryDistortionEffect,kCICategorySharpen和kCICategoryBlur这些类别中检索滤镜生成基于应用程序定义的功能类别字典,例如畸变和焦点字典。功能类别对于在用户有意义在菜单中组织滤镜名称很有用。代码不会遍历所有可能的Core Image滤镜类别,但您可以通过遵循相同的过程轻松扩展此代码。

    清单4-1 按功能类别构建滤镜字典的代码

    NSMutableDictionary *filtersByCategory = [NSMutableDictionary dictionary];
     
    NSMutableArray *filterNames = [NSMutableArray array];
    [filterNames addObjectsFromArray:
        [CIFilter filterNamesInCategory:kCICategoryGeometryAdjustment]];
    [filterNames addObjectsFromArray:
        [CIFilter filterNamesInCategory:kCICategoryDistortionEffect]];
    filtersByCategory[@"Distortion"] = [self buildFilterDictionary: filterNames];
     
    [filterNames removeAllObjects];
    [filterNames addObjectsFromArray:
        [CIFilter filterNamesInCategory:kCICategorySharpen]];
    [filterNames addObjectsFromArray:
        [CIFilter filterNamesInCategory:kCICategoryBlur]];
    filtersByCategory[@"Focus"] = [self buildFilterDictionary: filterNames];
    

    清单4-2显示了清单4-1中buildFilterDictionary调用的例程。此例程为功能类别中的每个滤镜构建属性字典。列表后面为每个编号行代码的详细说明。

    清单4-2 按功能名称构建滤镜字典

    - (NSMutableDictionary *)buildFilterDictionary:(NSArray *)filterClassNames  // 1
    {
        NSMutableDictionary *filters = [NSMutableDictionary dictionary];
        for (NSString *className in filterClassNames) {                         // 2
            CIFilter *filter = [CIFilter filterWithName:className];             // 3
     
            if (filter) {
                filters[className] = [filter attributes];                       // 4
            } else {
                NSLog(@"could not create '%@' filter", className);
            }
        }
        return filters;
    }
    

    这是代码的作用:

    • 将一组滤镜名称作为输入参数。回想一下清单4-1,该数组可以是来自多个Core Image滤镜类别的滤镜名称的串联。在此示例中,数组基于功能类别被程序设置(Distortion或Focus)。
    • 迭代滤镜名称数组。
    • 检索滤镜名称的滤镜对象。
    • 检索滤镜的属性字典,并将其添加到例程返回的字典中。

    注意: 在OS X v10.5及更高版本中运行的应用程序可以使用CIFilter Image Kit添加来提供滤镜浏览器和用于设置滤镜输入参数的视图。请参阅CIFilter Image Kit Additions和ImageKit Programming Guide。

    相关文章

      网友评论

          本文标题:Core Image编程指南翻译五(查询滤镜系统)

          本文链接:https://www.haomeiwen.com/subject/zqbwcqtx.html