Просмотр фильтров и установка входных параметров
Когда Кор Имэдж был представлен в OS X v10.4, он предоставил разработчикам доступ к ста встроенным фильтрам обработки изображений и возможности создать пользовательские фильтры. Несмотря на то, что фильтры изображения просты в использовании, интерфейс программирования Кора Имэджа не обеспечивает пользовательский интерфейс для выбора фильтров и для установки входных параметров фильтра. Вы или использовали Кора Имэджа, чтобы установить и применить фильтры программно или создали и управляли Вашим собственным пользовательским интерфейсом. С введением платформы Имэджа Кита в OS X v10.5, все, что изменилось.
IKFilterBrowserPanel
и IKFilterBrowserView
классы обеспечивают браузер фильтра, позволяющий пользователям:
Обзор фильтрует по категориям
Примените фильтр и предварительно просмотрите его эффекты
Выберите фильтр
Создайте наборы фильтра
См. описание фильтра
Как разработчик, можно выбрать, какие категории фильтра дисплеи браузера и показать ли предварительный просмотр. После того, как пользователь выбирает фильтр, можно использовать IKFilterUIView
класс для получения представления, содержащего средства управления для входных параметров фильтра.
Эта глава:
Описывает браузер фильтра и ракурс пользовательского интерфейса фильтра
Обсуждает опции пользовательского интерфейса, которые можно установить
Показывает, как установить и использовать браузер фильтра в приложении
Обеспечивает инструкции для получения ракурса пользовательского интерфейса фильтра и добавления его в существующее представление
Браузер фильтра
IKFilterBrowserPanel
и IKFilterBrowserView
классы обеспечивают панель, выводящую на экран список, по категориям, Базовых фильтров Изображения, доступных в системе, как показано на рисунке 6-1. Поле поиска наверху позволяет пользователям быстро находить фильтры.
Пользователь может нажать кнопку Preview для переключения предварительного просмотра предварительный просмотр прочь и на. Область предварительного просмотра позволяет пользователю видеть эффект применения фильтра с помощью настроек по умолчанию. Ваше приложение может установить изображение предварительного просмотра путем регистрации для уведомления IKFilterBrowserWillPreviewFilterNotification
. Краткое описание фильтра появляется ниже предварительного просмотра.
Путем щелчка плюс (+) кнопка, пользователь может добавить пользовательскую группу — называемый набором — как показано на рисунке 6-2. Пользователь может перетащить фильтры к набору как удобство для доступа к наборам обычно используемых фильтров. Наборы всегда появляются ниже встроенных категорий. Для удаления набора пользователь щелкает минус (–) кнопка.
Можно управлять визуальным появлением средств управления, включая их размер, в браузере фильтра путем указания надлежащей установки.
Ракурс пользовательского интерфейса фильтра
IKFilterUIView
класс обеспечивает представление, содержащее средства управления для входных параметров фильтра. Можно указать размер средств управления как миниатюра (IKUISizeMini
), маленький (IKUISizeSmall
), или регулярный (IKUISizeRegular
).
Фильтр может дополнительно определить основной, промежуточный, усовершенствованный, и наборы разработки входных параметров. Эти наборы определяют, которые вводят параметры, может быть представлен в пользовательском интерфейсе. Например, фильтр, имеющий много входных параметров, мог определить основной набор входных параметров для типичного потребителя, чтобы управлять, и затем программно установить другие входные параметры на значения по умолчанию. Тот же фильтр, однако, может определить усовершенствованный набор входных параметров, позволяющих профессиональным клиентам управлять всеми входными параметрами. Ваше приложение может запросить определенный набор входных параметров. Если фильтр определяет тот набор, то ракурс пользовательского интерфейса фильтра отражает Ваш запрос.
Рисунок 6-3 показывает окно, выводящее на экран ракурс пользовательского интерфейса фильтра для фильтра мрака, предоставленного Базовым Изображением (CIGloom
). Средства управления для этого фильтра маркируются Интенсивность и Радиус. В этом примере изображение, обрабатывающееся фильтром, маркируется Фоновое изображение и появляется в изображении, хорошо показанном в числе.
Вывод одного Базового фильтра Изображения может быть направлен к вводу другого Базового фильтра Изображения. Обычно Вы захотите записать приложение, позволяющее пользователям применять больше чем один Базовый фильтр Изображения к изображению. Рисунок 6-4 показывает приложение, вставляющее ракурсы пользовательского интерфейса для двух Базовых фильтров Изображения в окно — фильтр мрака и пикселизировать фильтр (CIPixellate
). Средства управления для пикселизировать фильтра маркируются Масштаб и Центр.
До сих пор Вы видели ракурсы пользовательского интерфейса для встроенных фильтров, предоставленных Базовым Изображением. Разработчики, пишущие модули изображения, могут обеспечить пользовательское представление для каждого из фильтров, определенных в модуле изображения путем реализации IKFilterCustomUIProvider
протокол. Для получения информации о модулях изображения см. Учебное руководство по Модулю Изображения.
Открытие браузера фильтра в приложении
Перед отображением браузера фильтра в приложении необходимо загрузить все фильтры в системе путем вызова loadAllPlugIns
метод CIPlugIn
класс. Тогда Вы создаете совместно используемый экземпляр IKFilterBrowserPanel
класс путем вызова filterBrowserPanelWithStyleMask:
метод. Можно выбрать между стилем Воды (значение по умолчанию) и нарисованным кистью металлическим взглядом (NSTexturedBackgroundWindowMask
). Вы показываете браузер фильтра путем вызова одного из нескольких методов, в зависимости от того, хотите ли Вы, чтобы браузер появился как лист, отдельное окно, или в пользовательском представлении. В этом разделе Вы будете видеть, как создать браузер фильтра, открывающийся в отдельном окне.
Этот раздел показывает горячий для создавания приложения, открывающего браузер фильтра в отдельном окне. Сначала Вы установите проект XCode, файлы проекта и интерфейс контроллера. Затем Вы добавите необходимые подпрограммы к файлу реализации. Затем Вы создадите пользовательский интерфейс в Интерфейсном Разработчике. Наконец, Вы сделаете несколько улучшений путем добавления словаря опций и использования различного фонового окна.
Установка проекта, файлов проекта и интерфейса контроллера
Выполните эти шаги для установки проекта:
В XCode создайте приложение Какао и назовите его
My Filter Browser
.Добавьте Кварцевые и Кварцевые платформы Ядра к проекту.
Для получения дополнительной информации посмотрите Используя Набор Изображения в XCode.
Выберите File> New File.
Выберите Objective-C Class и нажмите Далее.
Назовите файл
FilterBrowserController.m
и сохраните опцию создать заголовочный файл. Тогда нажмите Finish.В
FilterBrowserController.h
импортируйте Кварцевые платформы Ядра и Кварца путем добавления этих операторов:#import <Quartz/Quartz.h>
#import <QuartzCore/QuartzCore.h>
Создайте переменную экземпляра для браузера фильтра. Ваш интерфейс должен посмотреть следующим образом:
@interface FilterBrowserController : NSObject {
IKFilterBrowserPanel *filterBrowserPanel;
}
@end
Сохраните
FilterBrowserController.h
файл.
Добавление подпрограмм к файлу реализации
Для реализации подпрограмм браузера фильтра выполните эти шаги:
Откройтесь
FilterBrowserController.m
файл.В файле реализации добавьте
awakeFromNib
метод.Этот метод должен загрузить все Базовые плагины Изображения, как показано:
- (void)awakeFromNib
{
[CIPlugIn loadAllPlugIns];
}
Затем Вы запишете a
showFilterBrowserPanel:
метод, вызывающийся, когда пользователь выбирает пункт меню Open Filter Browser. Вы создадите пункт меню позже.Метод сначала определяет константу для установки маски так, чтобы браузер фильтра использовал нарисованный кистью металлический взгляд. Это является дополнительным. Значение по умолчанию должно использовать вид Воды. Обратите внимание на то, что необходимо обеспечить селектор для метода, вызывающегося, когда пользователь закрывает браузер. Вы запишете селекторный метод затем.
- (IBAction)showFilterBrowserPanel:(id)sender
{
int myStyleMask = NSTexturedBackgroundWindowMask;
if(!filterBrowserPanel)
filterBrowserPanel = [IKFilterBrowserPanel
filterBrowserPanelWithStyleMask:myStyleMask];
[filterBrowserPanel beginWithOptions:NULL modelessDelegate:self didEndSelector:@selector(browserPanelDidEndSelector:returnCode:contextInfo:) contextInfo:nil];
}
Добавьте
browserPanelDidEndSelector:returnCode:contextInfo:
селекторный метод.Этот метод просто вынимает браузер фильтра из экранного списка так, чтобы был он не видимый.
- (void)browserPanelDidEndSelector:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo
{
[sheet orderOut:self];
}
Сохраните
FilterBrowserController.m
файл.Откройтесь
FilterBrowserController.h
файл и добавляет это объявление метода, удостоверяясь, что Вы вставляете его перед@end
оператор.- (IBAction)showFilterBrowserPanel:(id)sender;
Сохраните
FilterBrowserController.h
файл.
Создание пользовательского интерфейса
Установите пользовательский интерфейс в Интерфейсном Разработчике путем выполнения этих шагов:
Дважды щелкните
MainMenu.nib
файл для открытия Interface Builder.Удалите значок окна в окне документа пера.
Выберите File> Synchronize With Xcode.
Перетащите
NSObject
от библиотеки до окна документа пера.В инспекторе Идентификационных данных для
NSObject
, выберите FilterBrowserController из всплывающего меню Класса.Дважды щелкните по значку MainMenu в окне документа пера.
Перетащите элемент подменю от Библиотеки до MainMenu и поместите его между пунктами меню Format и View. Назовите меню Filter.
Имя элемент в меню Filter Показывает Браузер Фильтра.
Перетащите управление от пункта меню Show Filter Browser до FilterBrowserController, и в соединениях выбирает панель
showFilterBrowserPanel:
.Сохраните файл пера.
В XCode нажмите Build и Go.
Когда приложение запустится, выберите Show Filter Browser из меню Filter.
Попробуйте Функцию поиска. Нажмите кнопку Preview для отключения предварительного просмотра и назад на. Тогда щелкните плюс (+) кнопка и добавьте набор. Перетащите несколько фильтров в свой набор.
Выйдите из приложения.
Теперь, когда выполнение приложения, Вы сделаете несколько улучшений путем добавления словаря опций и использования различного фона окна.
Совершенствование пользовательского интерфейса
Существует много опций, которые можно установить для изменения пользовательского интерфейса браузера фильтра. Выполните эти шаги для изменения опций:
В XCode, открытом
FilterBrowserController.m
файл и добавляет метод, создающий словарь опций. Удостоверьтесь, что Вы помещаете этот метод передshowFilterBrowserPanel:
метод.Набор Изображения обеспечивает константы, позволяющие Вам указать размер средств управления для использования в браузере. Значение по умолчанию должно использовать регулярные средства управления размером. Вы измените размер на миниатюру при помощи ключевой константы
IKUISizeFlavor
и значениеIKUISizeMini
.-(NSDictionary *)createFilterBrowserUIOptions
{
NSMutableDictionary *options = [[NSMutableDictionary alloc] init];
[options setObject:IKUISizeMini forKey:IKUISizeFlavor];
return options;
}
Когда Вы пишете более сложное приложение, Вы могли позволить пользователю установить размер элемента управления как предпочтение. Тогда Ваш метод словаря опций мог установить опции на основе пользовательских настроек.
Измените
showFilterBrowserPanel:
метод так, чтобы это вызвалоcreateFilterBrowserUIOptions
метод.Кроме того, установите маску стиля в
0
получить взгляд по умолчанию.После модификации метод для показа браузера фильтра должен посмотреть следующим образом:
- (IBAction)showFilterBrowserPanel:(id)sender
{
int myStyleMask = 0;
NSDictionary * options = [self createFilterBrowserUIOptions];
if(!filterBrowserPanel)
filterBrowserPanel = [IKFilterBrowserPanel
filterBrowserPanelWithStyleMask:myStyleMask];
[filterBrowserPanel beginWithOptions:options
modelessDelegate:self
didEndSelector:@selector(browserPanelDidEndSelector:returnCode:contextInfo:)
contextInfo:nil];
}
В XCode нажмите Build и Go.
После этих модификаций браузер фильтра должен выглядеть подобным следующему:
Обратите внимание на то, что при создании набора ранее набор появляется в браузере фильтра. Наборы являются персистентными через запуски приложения, на на пользовательское основание.
Получение ракурса пользовательского интерфейса фильтра
Этот раздел показывает, как получить представление для входных параметров фильтра и вставить тот ракурс пользовательского интерфейса фильтра в существующее представление. Вы положитесь на код в последнем разделе первым кодом добавления для ответа на пользовательское событие — двойной щелчок — в браузере фильтра. Когда пользователь дважды щелкает по имени фильтра в браузере фильтра, запросы приложения ракурс пользовательского интерфейса фильтра для выбранного фильтра и дисплеев, просматривающих, как показано на рисунке 6-3 и рисунке 6-4.
Необходимо зарегистрироваться для уведомления пользовательского события — также IKFilterBrowserFilterSelectedNotification
или IKFilterBrowserFilterDoubleClickNotification
из IKFilterBrowserPanel
класс. После того, как пользователь выбирает фильтр, Вы вызываете viewForUIConfiguration:excludedKeys:
метод CIFilter
класс (дополнение Имэджа Кита) для получения представления для фильтра. Можно обеспечить словарь конфигурации для указания размера средств управления для использования для входных параметров фильтра, как Вы сделали для самого браузера фильтра. Вы исключаете ключи для входных параметров, которые Вы не хотите показывать (такие как входное изображение, которое, в большинстве случаев, будет уже выведено на экран на экране).
Приложение, которое Вы создадите здесь, не выполняет обработки изображений. Это просто показывает, как установить пользовательский интерфейс. Однако это действительно показывает, как сложить несколько ракурсов пользовательского интерфейса фильтра вместе. Применение Фильтров Имэджу обсуждает использование пользовательского интерфейса Имэджа Кита вместе с Кором Имэджем.
Создание контроллера представления фильтра
Выполните эти шаги для установки контроллера представления фильтра:
В XCode, открытом проект, который Вы создали в последнем разделе.
Выберите File> New File.
Выберите Objective-C Class и нажмите Далее.
Назовите файл
FilterViewController.m
и сохраните опцию создать заголовочный файл. Тогда нажмите Finish.Это - контроллер для ракурса пользовательского интерфейса фильтра. Это получает фильтр, получает представление, содержащее средства управления для входных параметров фильтра и добавляющее представление к пользовательскому интерфейсу.
В
FilterViewController.h
файл, добавляют операторы для импорта Кварцевых и Кварцевых платформ Ядра. Необходимо будет также добавить директиву для класса FilterBrowserController, чтобы позволить этим двум контроллерам связываться.#import <Quartz/Quartz.h>
#import <QuartzCore/QuartzCore.h>
@class FilterBrowserController;
Добавьте два
IBOutlet
объекты к интерфейсу — один для представления, содержащего представление UI фильтра и другого для контроллера браузера фильтра. Вы установите их в Интерфейсном Разработчике позже.Интерфейс должен посмотреть следующим образом:
@interface FilterViewController : NSObject {
IBOutlet id filterUIContainerBox;
IBOutlet FilterBrowserController *browserController;
}
@end
Добавьте сигнатуру метода для
addFilter:
метод.Это - метод, добавляющий ракурс пользовательского интерфейса фильтра к панели. Вы запишете метод позже. Когда пользователь дважды щелкает по имени фильтра, метод вызывается и передал объект уведомления, содержащий имя выбранного фильтра.
- (void)addFilter:(NSNotification*)notification;
Сохраните
FilterViewController.h
файл.
Реализация контроллера представления фильтра
Для реализации подпрограмм, необходимых для контроллера представления фильтра, выполните эти шаги:
В XCode, открытом
FilterViewController.m
файл.Добавьте
awakeFromNib
метод. Этот метод выбирает цвет фона представления фильтра и удостоверяется, что панель впереди.- (void)awakeFromNib
{
[[filterUIContainerBox window] setBackgroundColor:[NSColor whiteColor]];
[[filterUIContainerBox window] orderFront:self];
}
Запишите метод, создающий и возвращающий словарь опций пользовательского интерфейса для представления. Вы установите размер входных средств управления параметром фильтра. (Можно установить дополнительные опции, если Вы хотели бы.)
-(NSDictionary *)createFilterBrowserUIOptions
{
NSMutableDictionary *options = [[NSMutableDictionary alloc] init];
[options setObject:IKUISizeMini forKey:IKUISizeFlavor];
return options;
}
Запишите
addFilter:
метод.Этот метод получает представление для выбранного фильтра и вставляет его в панель, которую Вы создали ранее в XCode. Встроенные комментарии объясняют, что делает код.
- (void)addFilter:(NSNotification*)notification
{
// Get the filter name from the notification.
NSString *filterName = [notification object];
// Create a CIFilter object.
CIFilter *newFilter = [CIFilter filterWithName:filterName];
// Add a filter user interface view only if a filter object exists.
if(newFilter)
{
// Get the frame rectangle that contains the filter UI container.
NSRect windowFrame = [[filterUIContainerBox window] frame];
// Set the default values for the filter.
[newFilter setDefaults];
// Get an options dictionary, which specifies the size of the controls.
NSDictionary *options = [self createFilterBrowserUIOptions];
// Create a view for the filter, exclude the input image key.
IKFilterUIView *filterContentView =
[newFilter viewForUIConfiguration:options
excludedKeys:[NSArray arrayWithObject:@"inputImage"]];
// Retrieve the bounding rectangle for the view.
NSRect contentBounds = [filterContentView bounds];
// Make the view width match the width of the filter UI container.
contentBounds.size.width = [filterUIContainerBox bounds].size.width;
// Set up automatic resizing to accommodate additional views.
[filterContentView setAutoresizingMask:NSViewMinYMargin];
// Increase the window frame size to accommodate the filter UI view.
windowFrame.size.height += [filterContentView bounds].size.height;
windowFrame.origin.y -= [filterContentView bounds].size.height;
// Set the frame of the filter UI container to be the window frame.
// Display the changes and animate for a nice effect.
[[filterUIContainerBox window] setFrame:windowFrame
display:YES animate:YES];
// Add the filter UI view to the filter container.
[filterUIContainerBox addSubview:filterContentView];
}
Сохраните
FilterViewController.m
файл.
Изменение контроллера браузера фильтра
Затем необходимо будет сделать несколько модификаций к контроллеру браузера фильтра, чтобы позволить представлению и контроллерам браузера связываться. Необходимо будет также зарегистрироваться для уведомления каждый раз, когда пользователь дважды щелкает по имени фильтра. Выполните эти шаги:
Откройтесь
FilterBrowserController.h
файл и добавляет этоimport
оператор:#import "FilterViewController.h"
Добавьте
IBOutlet
дляFilterViewController
. Измененный интерфейс должен теперь быть похожим на это:@interface FilterBrowserController : NSObject {
IKFilterBrowserPanel *filterBrowserPanel;
IBOutlet FilterViewController *viewController;
}
- (IBAction)showFilterBrowserPanel:(id)sender;
@end
Откройтесь
FilterBrowserController.m
файл и изменяетawakeFromNib
метод для регистрации для уведомления двойного щелчка, устанавливающего наблюдателя какFilterViewController
и метод какaddFilter:
.awakeFromNib
метод должен теперь взгляды следующим образом:- (void)awakeFromNib
{
[CIPlugIn loadAllPlugIns];
[[NSNotificationCenter defaultCenter] addObserver:viewController
selector:@selector(addFilter:)
name:IKFilterBrowserFilterDoubleClickNotification
object:nil];
}
Сохраните и закройтесь
FilterBrowserController.h
иFilterBrowserController.m
файлы.
Создание пользовательского интерфейса
Установите пользовательский интерфейс в Интерфейсном Разработчике путем выполнения этих шагов:
Дважды щелкните
MainMenu.nib
файл для открытия Interface Builder.Перетащите панель от Библиотеки до окна документа пера.
Измените имя Значка панелей к FilterInputs.
В инспекторе Атрибутов измените заголовок панели для Фильтрации Входных Параметров.
Выберите File> Synchronize With Xcode.
Перетащите объект (
NSObject
) от Библиотеки до окна документа пера.В инспекторе Идентификационных данных выберите FilterViewController из всплывающего меню Класса.
В окне документа пера перетащите управление от значка FilterBrowserController до значка FilterViewController. Тогда в панели соединений, выберите
viewController
выход.Перетащите управление от значка FilterViewController до значка FilterBrowserController. Тогда соединитесь с
browserController
выход.Перетащите управление от значка FilterInputs до значка FilterViewController. Тогда в соединениях панель выбирают
delegate
.Перетащите Пользовательское Представление к панели. Удостоверьтесь, что содержали его по панели, пока панель не открывается, затем отбросьте его в открытой панели.
Перетащите управление от значка FilterViewController до пользовательского представления. Тогда в соединениях панель выбирают
filterUIContainerBox
.Щелкните по пользовательскому представлению в панели.
Установите размер представления к 320 2 и удостоверьтесь, что представление (который будет тонкой строкой) расположено наверху окна.
Это - представление, к которому Вы добавите ракурс пользовательского интерфейса фильтра. Если Вы не хотите запуститься путем показа чего-то в этом представлении, его высота может быть незначительной.
Заведите пружины и распорки для Пользовательского Представления как это:
Заведите пружины и распорки для представления содержания Пользовательского Представления так, чтобы только были установлены распорки — которые являются внешними элементами Автокалибровки —.
Установите размер панели к 320 8.
Если Вы не хотите показать что-то в панели кроме входных параметров фильтра, высота панели может быть как можно меньше.
Сохраните
MainMenu.nib
файл.В XCode нажмите Build и Go.
Выберите Show Filter Browser из меню Filter. Дважды щелкните по одному или более фильтрам для тестирования кода. Каждый раз, когда Вы дважды щелкаете по имени фильтра, панель Filter Input Parameters должна показать входные параметры для того фильтра.
Применение фильтров к изображению
Вы видели в предыдущих разделах, как записать код, представляющий простой пользовательский интерфейс для браузера фильтра и входных параметров фильтра. Полнофункциональное приложение для обработки изображений требует более сложного пользовательского интерфейса. Например, это было бы:
Покажите входную панель параметра фильтра только после того, как изображение открыто, и фильтр выбран.
Добавьте код для формирования рисунка визуально входных параметров каждого фильтра, путем добавления ограничительной рамки, имени фильтра, варьирования цвета фона для каждого представления UI фильтра, или некоторыми другими средними значениями.
Позвольте пользователю удалять фильтр из входной панели параметров, и возможный перестраивают порядок.
Полностью функционирующее приложение для обработки изображений также требует кода, открывающего и сохраняющего образы и применяющего выбранные фильтры к изображению. Пример IUUIDemoApplication, предоставленный инструменты разработчика для OS X v10.5, обеспечивает большую часть функциональности, необходимой в полнофункциональном приложении для обработки изображений. Теперь, когда Вы знаете, как часть пользовательского интерфейса браузера фильтра и работ фильтров, можно хотеть смотреть на IUUIDemoApplication, чтобы видеть, как объединить код пользовательского интерфейса с кодом, применяющим Базовые фильтры Изображения.
Можно найти приложение в:
/Developer/Examples/Quartz/Core Image/
IUUIDemoApplication имеет контроллер для браузера фильтра и другой контроллер для ракурса пользовательского интерфейса фильтра. Это также создает объект, отслеживающий фильтры и другой, который отслеживает ракурсы пользовательского интерфейса фильтра. Это использует Базовый интерфейс программирования Изображения для обработки изображений.
Если Вы не знакомы с Базовым Изображением, см.: