Запросы системы для фильтров
Базовое Изображение обеспечивает методы, позволяющие Вам запросить систему для доступных встроенных фильтров и связанной информации о каждом фильтре — имя дисплея, ввести параметры, типы параметра, значения значений по умолчанию, и т.д. Запросы системы предоставляют Вам большую часть актуальной информации о доступных фильтрах. Если Ваши поддержки приложений, позволяющие пользователям выбирать и, устанавливают фильтры, можно использовать эту информацию при создании пользовательского интерфейса для фильтра.
Получение списка фильтров и атрибутов
Используйте filterNamesInCategory:
и filterNamesInCategories:
методы для обнаружения точно, какие фильтры доступны. Фильтры категоризированы для составления более управляемого списка. Если Вы знаете категорию фильтра, можно узнать фильтры, доступные для той категории путем вызова метода filterNamesInCategory:
и предоставление одной из констант категории, перечисленных в Таблице 4-1, Таблице 4-2 или Таблице 4-3.
Если Вы хотите найти все доступные фильтры для списка категорий, можно вызвать метод filterNamesInCategories:
, предоставление массива констант категории от перечисленных в таблицах. Метод возвращается NSArray
объект, заполненный с фильтром, называет для каждой категории. Можно получить список всех фильтров для всех категорий путем предоставления nil
вместо массива констант категории.
Фильтр может быть элементом больше чем одной категории. Категория может указать:
Тип эффекта, произведенного фильтром (настройка цвета, искажение, и т.д). Посмотрите Таблицу 4-1.
Использование фильтра (неподвижное изображение, видео, расширенный динамический диапазон, и т.д). Посмотрите Таблицу 4-2.
Предоставлен ли фильтр Базовым (встроенным) Изображением. Посмотрите Таблицу 4-3.
Тип эффекта | Указывает |
---|---|
Эффекты искажения, такие как удар, вращение, дыра | |
Корректировка геометрии, такая как аффинное преобразование, обрезка, перспектива преобразовывает | |
Составление композита, такое как источник, минимум, источник на, цвет избегает режима смешивания | |
Полутоновые эффекты, такие как экран, линейный растр, штриховали | |
Настройка цвета, такая как гамма корректируются, белая точка корректируются, воздействие | |
Цветовой эффект, такой как оттенок корректируют, постеризируют | |
Переходы между изображениями, теми, которые распадаются, распадаются с маской, сильно ударяют | |
Эффект мозаики, такой как параллелограм, треугольник | |
Генератор изображения, такой как дорожки, постоянный цвет, шахматная доска | |
Градиент, такой как осевой, радиальный, Гауссов | |
Стилизуйте, те, которые пикселизируют, кристаллизуют | |
Увеличьте резкость, яркость | |
Размытость, такой как Гауссов, изменение масштаба, движение |
Использовать | Указывает |
---|---|
Может использоваться для неподвижных изображений | |
Может использоваться для видео | |
Может использоваться для чересстрочных изображений | |
Может использоваться для неквадратных пикселей | |
Может использоваться для пикселей расширенного динамического диапазона |
Источник фильтра | Указывает |
---|---|
Фильтр, предоставленный Базовым Изображением |
После получения списка имен фильтра можно получить атрибуты для фильтра путем создания a CIFilter
объект и вызов метода attributes
следующим образом:
CIFilter *myFilter = [CIFilter filterWithName:@"<# Filter Name Here #>"]; |
NSDictionary *myFilterAttributes = [myFilter attributes]; |
Вы заменяете строку»<# Filter Name Here #>
«с именем фильтра Вы интересуетесь. Атрибуты включают такие вещи как имя, категории, класс, минимум и максимум. См. Ссылку класса CIFilter для полного списка атрибутов, которые могут быть возвращены.
Создавание словаря фильтров
Если Ваше приложение обеспечивает пользовательский интерфейс, оно может консультироваться со словарем фильтра, чтобы создать и обновить пользовательский интерфейс. Например, отфильтруйте атрибуты, которые являются булевской переменной, потребовал бы флажка или подобного элемента пользовательского интерфейса, и атрибуты, варьирующиеся постоянно по диапазону, могли использовать ползунок. Можно использовать максимальные и минимальные значения в качестве основания для текстовых меток. Установка атрибута по умолчанию продиктовала бы начальную установку в пользовательском интерфейсе.
Имена фильтра и атрибуты предоставляют всю информацию, необходимо создать пользовательский интерфейс, позволяющий пользователям выбирать фильтр и управлять его входными параметрами. Атрибуты для фильтра говорят Вам, сколько введенных параметров фильтр имеет, названия параметра, тип данных, и минимум, максимум и значения по умолчанию.
Перечисление 4-1 показывает код, получающий имена фильтра и создающий словарь фильтров по функциональным категориям. Код получает, просачивается эти категории —kCICategoryGeometryAdjustment
, kCICategoryDistortionEffect
, kCICategorySharpen
, и kCICategoryBlur
— но создает словарь на основе определенных с помощью приложения функциональных категорий, таких как Искажение и Фокус. Функциональные категории полезны для организации имен фильтра в меню, которое целесообразно для пользователя. Код не выполняет итерации через все возможные Базовые категории фильтра Изображения, но можно легко расширить этот код следующим тот же процесс.
Код перечисления 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 показывает buildFilterDictionary
подпрограмму вызывают в Перечислении 4-1. Эта подпрограмма создает словарь атрибутов для каждого из фильтров в функциональной категории. Подробное объяснение каждой пронумерованной строки кода следует за перечислением.
Перечисление 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, что этот массив может быть связью имен фильтра больше чем от одной Базовой категории фильтра Изображения. В этом примере массив основан на функциональных категориях, установленных приложением (Искажение или Фокус).
Выполняет итерации через массив имен фильтра.
Получает объект фильтра для имени фильтра.
Получает словарь атрибутов для фильтра и добавляет его к словарю, возвращенному подпрограммой.