Запросы системы для фильтров

Базовое Изображение обеспечивает методы, позволяющие Вам запросить систему для доступных встроенных фильтров и связанной информации о каждом фильтре — имя дисплея, ввести параметры, типы параметра, значения значений по умолчанию, и т.д. Запросы системы предоставляют Вам большую часть актуальной информации о доступных фильтрах. Если Ваши поддержки приложений, позволяющие пользователям выбирать и, устанавливают фильтры, можно использовать эту информацию при создании пользовательского интерфейса для фильтра.

Получение списка фильтров и атрибутов

Используйте filterNamesInCategory: и filterNamesInCategories: методы для обнаружения точно, какие фильтры доступны. Фильтры категоризированы для составления более управляемого списка. Если Вы знаете категорию фильтра, можно узнать фильтры, доступные для той категории путем вызова метода filterNamesInCategory: и предоставление одной из констант категории, перечисленных в Таблице 4-1, Таблице 4-2 или Таблице 4-3.

Если Вы хотите найти все доступные фильтры для списка категорий, можно вызвать метод filterNamesInCategories:, предоставление массива констант категории от перечисленных в таблицах. Метод возвращается NSArray объект, заполненный с фильтром, называет для каждой категории. Можно получить список всех фильтров для всех категорий путем предоставления nil вместо массива констант категории.

Фильтр может быть элементом больше чем одной категории. Категория может указать:

Табличные 4-1  константы категории Фильтра для типов эффекта

Тип эффекта

Указывает

kCICategoryDistortionEffect

Эффекты искажения, такие как удар, вращение, дыра

kCICategoryGeometryAdjustment

Корректировка геометрии, такая как аффинное преобразование, обрезка, перспектива преобразовывает

kCICategoryCompositeOperation

Составление композита, такое как источник, минимум, источник на, цвет избегает режима смешивания

kCICategoryHalftoneEffect

Полутоновые эффекты, такие как экран, линейный растр, штриховали

kCICategoryColorAdjustment

Настройка цвета, такая как гамма корректируются, белая точка корректируются, воздействие

kCICategoryColorEffect

Цветовой эффект, такой как оттенок корректируют, постеризируют

kCICategoryTransition

Переходы между изображениями, теми, которые распадаются, распадаются с маской, сильно ударяют

kCICategoryTileEffect

Эффект мозаики, такой как параллелограм, треугольник

kCICategoryGenerator

Генератор изображения, такой как дорожки, постоянный цвет, шахматная доска

kCICategoryGradient

Градиент, такой как осевой, радиальный, Гауссов

kCICategoryStylize

Стилизуйте, те, которые пикселизируют, кристаллизуют

kCICategorySharpen

Увеличьте резкость, яркость

kCICategoryBlur

Размытость, такой как Гауссов, изменение масштаба, движение

Табличные 4-2  константы категории Фильтра для использования фильтра

Использовать

Указывает

kCICategoryStillImage

Может использоваться для неподвижных изображений

kCICategoryVideo

Может использоваться для видео

kCICategoryInterlaced

Может использоваться для чересстрочных изображений

kCICategoryNonSquarePixels

Может использоваться для неквадратных пикселей

kCICategoryHighDynamicRange

Может использоваться для пикселей расширенного динамического диапазона

Табличные 4-3  константы категории Фильтра для источника фильтра

Источник фильтра

Указывает

kCICategoryBuiltIn

Фильтр, предоставленный Базовым Изображением

После получения списка имен фильтра можно получить атрибуты для фильтра путем создания 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;
}

Вот то, что делает код:

  1. Берет массив имен фильтра как входной параметр. Вспомните из Перечисления 4-1, что этот массив может быть связью имен фильтра больше чем от одной Базовой категории фильтра Изображения. В этом примере массив основан на функциональных категориях, установленных приложением (Искажение или Фокус).

  2. Выполняет итерации через массив имен фильтра.

  3. Получает объект фильтра для имени фильтра.

  4. Получает словарь атрибутов для фильтра и добавляет его к словарю, возвращенному подпрограммой.