Упаковка и загрузка модулей изображения

Модуль изображения представляет сменную архитектуру для Базовых фильтров Изображения. Модули изображения используют NSBundle класс как упаковочный механизм, чтобы позволить Вам делать фильтры, которые Вы создаете доступный другим приложениям. Модуль изображения может содержать фильтры, которые являются исполнимой программой или неисполнимой программой. (См. Исполнимые и Неисполнимые Фильтры для подробных данных.)

Для создания модуля изображения из пользовательского фильтра необходимо выполнить следующие задачи:

  1. Запишите фильтр путем следования инструкциям в Создании Пользовательского Фильтра.

  2. Создайте проект модуля изображения в XCode.

  3. Добавьте свои файлы фильтра к проекту.

  4. Настройте метод загрузки.

  5. Измените список свойств описания.

  6. Создайте и протестируйте модуль изображения

После чтения этой главы можно также хотеть

Перед началом работы

Загрузите выборку CIDemoImageUnit. При создании модуля изображения у Вас должны быть подобные файлы. Этот модуль изображения содержит один фильтр, FunHouseMirror. Каждый просачивается, модуль изображения обычно имеет три файла: интерфейсный файл для класса фильтра, связанный файл реализации и файл ядра. Как Вы видите в проекте примера кода, это - истина для фильтра FunHouseMirror: FunHouseMirrorFilter.h, FunHouseMirrorFilter.m, и funHouseMirror.cikernel.

Каждый модуль изображения должен также иметь интерфейс и файлы реализации для CIPlugInRegistration протокол. В числе посмотрите MyPlugInLoader.h и MyPlugInLoader.m. Другой важный файл, который необходимо будет изменить, Description.plist файл.

Теперь, когда Вы знаете немного о файлах в проекте модуля изображения, Вы готовы создать тот.

Создайте проект модуля изображения в XCode

XCode обеспечивает шаблон для создания модулей изображения. После создания проекта модуля изображения у Вас будет большинство файлов, необходимо начать, и проект будет соединен с надлежащими платформами.

bullet
Создать проект модуля изображения в XCode
  1. Запустите XCode и выберите File> New Project.

  2. В шаблонном окне выберите System Plug-in> Image Unit Plug-in. Тогда нажмите Далее.

  3. Назовите проект модуля изображения и нажмите 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-1  Ключи в списке свойств описания фильтра

Ключ

Присваиваемые значения

CIPlugInFilterList

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

CIFilterDisplayName

Локализованное имя фильтра, доступное в Description.strings файл.

CIFilterClass

Имя класса в двоичном файле, содержащем реализацию фильтра при наличии.

CIKernelFile

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

CIFilterAttributes

Словарь атрибутов, описывающих фильтр. Это совпадает со словарем атрибутов, который Вы обеспечили, когда Вы записали фильтр.

CIInputs

Массив входных ключей и связанных атрибутов. Входные ключи должны быть в том же порядке как параметры функции ядра. Каждый атрибут должен содержать свой класс параметра (см. Таблицу 10-2), и имя.

CIOutputs

Зарезервированный для будущего использования.

CIHasCustomInterface

Ни один. Используйте этот ключ, чтобы указать, что фильтр имеет настроенный пользовательский интерфейс. Узел обеспечивает представление для пользовательского интерфейса.

CIPlugInVersion

Версия архитектуры CIPlugIn, которая является 1.0.

Таблица 10-2 перечисляет входные классы параметра и значение, связанное с каждым классом. Для неисполнимого фильтра Вы обеспечиваете класс параметра для каждого параметра ввода и вывода.

Табличные 10-2  Входные классы параметра и математические ожидания

Входной класс параметра

Присваиваемое значение

CIColor

Строка, указывающая цвет.

CIVector

Строка, указывающая вектор. Посмотрите vectorWithString:.

CIImage

NSString объект, описывающий или относительный путь изображения к пакету или абсолютный путь изображения.

Все скалярные типы

NSNumber значение.

Создайте и протестируйте модуль изображения

Прежде чем Вы начнете создавать модуль изображения, необходимо протестировать код ядра, чтобы удостовериться, что он работает должным образом. (См. Кварцевого Композитора Использования для Тестирования Подпрограммы Ядра.) После успешного создания модуля изображения Вы захотите скопировать его в следующие каталоги:

Затем необходимо попытаться загрузить модуль изображения из приложения и использовать фильтр (или фильтры), которые упаковываются в модуле. Посмотрите Загружающиеся Модули Изображения, Запросы Системы для Фильтров и Обработки Изображений.

Загрузка модулей изображения

Встроенные фильтры, предоставленные Apple, загружаются автоматически. Единственные фильтры, которые необходимо загрузить, являются сторонними фильтрами, упакованными как модули изображения. Модуль изображения, который является просто пакетом, может содержать один или несколько фильтров обработки изображений. Если модуль изображения установлен в одном из расположений, обсужденных в Сборке и Тесте Модуль Изображения, то это может использоваться любым app\, вызывающим один из load методы, предоставленные CIPlugin класс и показанный в Таблице 10-3. Необходимо загрузить модули изображения только один раз. Например, для загрузки всех глобально установленных модулей изображения Вы могли добавить следующую строку кода к подпрограмме инициализации в Вашем приложении.

  [CIPlugIn loadAllPlugIns];

После вызова load метод, Вы продолжаете то же, как Вы были бы для использования любого из фильтров обработки изображений, предоставленных Apple. Следуйте инструкциям в остальной части этой главы.

Табличные 10-3  Методы раньше загружали модули изображения

Метод

Комментарий

loadAllPlugIns

Сканирования отображают каталоги модуля (/Library/Graphics/Image Units и ~/Library/Graphics/Image Units) для файлов, имеющих .plugin расширение и затем загружает модуль изображения.

loadNonExecutablePlugIns

Сканирования отображают каталоги модуля (/Library/Graphics/Image Units и ~/Library/Graphics/Image Units) для файлов, имеющих .plugin расширение и затем загружает только ядра модуля изображения. Т.е. это загружает только те файлы, имеющие .cikernel расширение. Этот вызов не выполняет ни одного кода модуля изображения.

loadPlugIn:allowNonExecutable:

Загружает модуль изображения в расположении, указанном url параметр. Передача true для allowNonExecutable параметр, если Вы хотите загрузить только ядра модуля изображения, не выполняя ни одного кода модуля изображения.

См. также