Упаковка и загрузка модулей изображения
Модуль изображения представляет сменную архитектуру для Базовых фильтров Изображения. Модули изображения используют NSBundle
класс как упаковочный механизм, чтобы позволить Вам делать фильтры, которые Вы создаете доступный другим приложениям. Модуль изображения может содержать фильтры, которые являются исполнимой программой или неисполнимой программой. (См. Исполнимые и Неисполнимые Фильтры для подробных данных.)
Для создания модуля изображения из пользовательского фильтра необходимо выполнить следующие задачи:
Запишите фильтр путем следования инструкциям в Создании Пользовательского Фильтра.
После чтения этой главы можно также хотеть
Считайте Учебное руководство по Модулю Изображения для всесторонней информации о записи ядер и создании модулей изображения.
Посетите Модули Изображения Apple, Лицензирующие и веб-страницу Товарных знаков, чтобы узнать, как проверить модули изображения и получить логотип Модуля Изображения.
Перед началом работы
Загрузите выборку CIDemoImageUnit. При создании модуля изображения у Вас должны быть подобные файлы. Этот модуль изображения содержит один фильтр, FunHouseMirror. Каждый просачивается, модуль изображения обычно имеет три файла: интерфейсный файл для класса фильтра, связанный файл реализации и файл ядра. Как Вы видите в проекте примера кода, это - истина для фильтра FunHouseMirror: FunHouseMirrorFilter.h
, FunHouseMirrorFilter.m
, и funHouseMirror.cikernel
.
Каждый модуль изображения должен также иметь интерфейс и файлы реализации для CIPlugInRegistration
протокол. В числе посмотрите MyPlugInLoader.h
и MyPlugInLoader.m
. Другой важный файл, который необходимо будет изменить, Description.plist
файл.
Теперь, когда Вы знаете немного о файлах в проекте модуля изображения, Вы готовы создать тот.
Создайте проект модуля изображения в XCode
XCode обеспечивает шаблон для создания модулей изображения. После создания проекта модуля изображения у Вас будет большинство файлов, необходимо начать, и проект будет соединен с надлежащими платформами.
Запустите XCode и выберите File> New Project.
В шаблонном окне выберите System Plug-in> Image Unit Plug-in. Тогда нажмите Далее.
Назовите проект модуля изображения и нажмите Finish.
Окно проекта открывается этими создаваемыми файлами:
MyImageUnitPlugInLoader.h
иMyImageUnitPlugInLoader.m
, интерфейс и файлы реализации дляCIPlugInRegistration
протоколMyImageUnitFilter.h
иMyImageUnitFilter.m
MyImageUnitFilterKernel.cikernel
MyImageUnitKernelFilter.cikernel
файл, предоставленный в проекте модуля изображения, является демонстрационным файлом ядра. Если Вы уже создали фильтр, Вам не будет нужен этот файл, таким образом, можно будет удалить его. Вы добавите свое собственное к проекту через только момент.
Настройте метод загрузки
Откройте файл, реализующий CIPlugInRegistration
протокол. В нем Вы найдете a load
метод, как показано в Перечислении 10-1. У Вас есть опция добавить код к этому методу для выполнения любой инициализации, это необходимо, такие как регистрационная проверка. Возвраты метода true
если фильтр загружается успешно. Если Вам не нужна никакая пользовательская инициализация, можно оставить метод загрузки как есть
Перечисление 10-1 метод загрузки, предоставленный шаблоном модуля изображения
-(BOOL)load:(void*)host |
{ |
// Custom image unit initialization code goes here |
return YES; |
} |
Если Вы хотите, можно записать unload
метод для выполнения любых задач очистки, которые могли бы требоваться фильтром.
Добавьте свои файлы фильтра к проекту
Добавьте файлы фильтра, которые Вы создали ранее к проекту модуля изображения. Вспомните необходимость в интерфейсе и файлах реализации для каждого фильтра и связанном файле ядра. Если Вы еще не записали фильтр, посмотрите Создающие Пользовательские Фильтры.
Следует иметь в виду, что можно упаковать больше чем один фильтр в модуле изображения, и Вы можете иметь как много файлов ядра по мере необходимости для Ваших фильтров. Просто удостоверьтесь, что Вы включаете весь фильтр и файлы ядра, которые Вы хотите упаковать.
Измените список свойств описания
Для исполнимых фильтров только номер версии, класс фильтра и имя фильтра читаются из Description.plist
файл. Вы обеспечиваете список атрибутов для фильтра в Вашем коде (см. Запись Метод Пользовательских атрибутов). Необходимо проверить Description.plist
файл, предоставленный в шаблоне модуля изображения для проверки имени фильтра, корректен и ввести номер версии.
Для неисполнимых CPU фильтров узел модуля изображения читает Description.plist
файл для получения информации о фильтре приписывает перечисленный inTable 10-1. Необходимо изменить Description.plist
файл, таким образом, это содержит надлежащую информацию. (Для получения информации о ключах фильтра см. также Базовый Ссылочный Набор Изображения.)
Ключ | Присваиваемые значения |
---|---|
| Словарь словарей фильтра. Если этот ключ присутствует, он указывает, что существует по крайней мере один Базовый фильтр Изображения, определенный в модуле изображения. |
| Локализованное имя фильтра, доступное в |
| Имя класса в двоичном файле, содержащем реализацию фильтра при наличии. |
| Имя файла ядра фильтра в пакете, при наличии. Используйте этот ключ для определения неисполнимого фильтра. |
| Словарь атрибутов, описывающих фильтр. Это совпадает со словарем атрибутов, который Вы обеспечили, когда Вы записали фильтр. |
| Массив входных ключей и связанных атрибутов. Входные ключи должны быть в том же порядке как параметры функции ядра. Каждый атрибут должен содержать свой класс параметра (см. Таблицу 10-2), и имя. |
| Зарезервированный для будущего использования. |
| Ни один. Используйте этот ключ, чтобы указать, что фильтр имеет настроенный пользовательский интерфейс. Узел обеспечивает представление для пользовательского интерфейса. |
| Версия архитектуры CIPlugIn, которая является 1.0. |
Таблица 10-2 перечисляет входные классы параметра и значение, связанное с каждым классом. Для неисполнимого фильтра Вы обеспечиваете класс параметра для каждого параметра ввода и вывода.
Входной класс параметра | Присваиваемое значение |
---|---|
CIColor | Строка, указывающая цвет. |
CIVector | Строка, указывающая вектор. Посмотрите |
CIImage | |
Все скалярные типы | |
Создайте и протестируйте модуль изображения
Прежде чем Вы начнете создавать модуль изображения, необходимо протестировать код ядра, чтобы удостовериться, что он работает должным образом. (См. Кварцевого Композитора Использования для Тестирования Подпрограммы Ядра.) После успешного создания модуля изображения Вы захотите скопировать его в следующие каталоги:
/Library/Graphics/Image Units
~/Library/Graphics/Image Units
Затем необходимо попытаться загрузить модуль изображения из приложения и использовать фильтр (или фильтры), которые упаковываются в модуле. Посмотрите Загружающиеся Модули Изображения, Запросы Системы для Фильтров и Обработки Изображений.
Загрузка модулей изображения
Встроенные фильтры, предоставленные Apple, загружаются автоматически. Единственные фильтры, которые необходимо загрузить, являются сторонними фильтрами, упакованными как модули изображения. Модуль изображения, который является просто пакетом, может содержать один или несколько фильтров обработки изображений. Если модуль изображения установлен в одном из расположений, обсужденных в Сборке и Тесте Модуль Изображения, то это может использоваться любым app\, вызывающим один из load
методы, предоставленные CIPlugin
класс и показанный в Таблице 10-3. Необходимо загрузить модули изображения только один раз. Например, для загрузки всех глобально установленных модулей изображения Вы могли добавить следующую строку кода к подпрограмме инициализации в Вашем приложении.
[CIPlugIn loadAllPlugIns]; |
После вызова load
метод, Вы продолжаете то же, как Вы были бы для использования любого из фильтров обработки изображений, предоставленных Apple. Следуйте инструкциям в остальной части этой главы.
Метод | Комментарий |
---|---|
| Сканирования отображают каталоги модуля ( |
| Сканирования отображают каталоги модуля ( |
| Загружает модуль изображения в расположении, указанном |
См. также
Учебное руководство по Модулю изображения, обеспечивающее поэтапные инструкции для записи множества ядер и упаковки их как модули изображения.
CIDemoImageUnit является демонстрационным модулем изображения проект XCode.