CIFilters值

时间:2013-09-18 04:55:15

标签: iphone ios ipad

是否有作弊清单显示所有CIF过滤器及其各自的值范围?

Apple如何在不告诉我们可能范围的情况下编写doc like this列出所有过滤器?

来吧Apple。

2 个答案:

答案 0 :(得分:3)

我已将其更新为正常运行,因为我试图向您展示。我忘记了属性是每个过滤器,每个输入键是属性字典中的键的名称。这些值本身就是包含我们想要的信息的字典。

但请注意,这并不能完成所有工作。如果您想要更多信息并自己做一些工作,则必须查找一些内容。这样做是迭代所有过滤器的所有参数并打印出它们的名称,最小值和最大值,即使这没有意义。 (例如,图像没有最小值或最大值 - 在这种情况下,它会打印“(null)”。)请注意,许多参数没有最小值或最大值。它们可以覆盖整个浮点范围。如果您要创建滑块,请使用kCIAttributeSliderMinkCIAttributeSilderMax属性,而不是kCIAttributeMinkCIAttributeMax

您还可以获取属性类型和类,并打印出其他类型值的范围(如果这有意义)。例如,一些参数是点,矩形等。

// Insert code here to initialize your application
// Get the list of all filters
NSArray* allFilters = [CIFilter filterNamesInCategories:nil];

// Iterate over the filters
NSEnumerator* filterEnum = [allFilters objectEnumerator];
NSString* nextFilter = nil;
while ((nextFilter = [filterEnum nextObject]) != nil)
{
    NSLog (@"filter = %@", nextFilter);
    // Get all of the input parameters to this filter
    CIFilter *filter = [CIFilter filterWithName:nextFilter]; // 3
    NSDictionary* attribs = [filter attributes];
    NSArray* inputs = [filter inputKeys];

    // Iterate over the input keys
    NSEnumerator* inputEnum = [inputs objectEnumerator];
    NSString* nextInput = nil;
    while ((nextInput = [inputEnum nextObject]) != nil)
    {
        // Note that you'll have to do some work here because some
        // parameters return vectors instead of just numbers, but
        // this is the general idea
        NSDictionary*   paramAttrib = [attribs objectForKey:nextInput];
        NSString* name = [paramAttrib objectForKey:kCIAttributeDisplayName];
        NSNumber* min = [paramAttrib objectForKey:kCIAttributeMin];
        NSNumber* max = [paramAttrib objectForKey:kCIAttributeMax];
        NSLog (@"param: %@, min = %@, max = %@", name, min, max);
    }
}

另外,我非常认真地对文档提出错误。如果你没有提交错误,他们肯定不会改变它们。我已经提交了文档错误,并且已经修复了。

答案 1 :(得分:0)

您可以在this项目中找到所有过滤器及其属性。了解过滤器的详细信息非常有用。

enter image description here