是否有显示所有 CIFilter 及其各自值范围的作弊列表?
Apple 如何在不告诉我们可能的范围的情况下写出像这样列出所有过滤器的文档?
来吧苹果。
我已经对其进行了更新,以使其能够正常工作,以适应我试图向您展示的内容。我忘记了属性是每个过滤器的,每个输入键都是属性字典中键的名称。这些值本身就是包含我们想要的信息的字典。
但是请注意,这并不能完成所有工作。如果您想了解更多信息并自己做一些工作,您将不得不查找一些内容。它的作用是遍历所有过滤器的所有参数并打印出它们的名称、最小值和最大值,即使这没有意义。(例如图像没有最小值或最大值 - 在这种情况下它会打印“(null)”。)请注意,许多参数没有最小值或最大值。它们可以覆盖整个浮点范围。如果您尝试制作滑块,请使用kCIAttributeSliderMin
andkCIAttributeSilderMax
属性而不是kCIAttributeMin
and kCIAttributeMax
。
您还可以获取属性类型和类并打印出其他类型值的范围(如果有意义的话)。例如,一些参数是点、矩形等。
// 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);
}
}
另外,我很认真地在文档上提交错误。如果您不提交错误,他们当然不会更改它们。我已经提交了有关文档的错误,并且它们已得到修复。
您可以在此项目中找到所有过滤器及其属性。了解过滤器的细节非常有用。