На главную
Назад |
Содержание |
Вперед
Порядок взаимодействия редактора и фильтрационного плагина
При активизации фильтра из меню Filter, редактор несколько раз вызывает
процедуру плагина с разными значениями параметра selector в
определенной последовательности. Разберем значения этих вызовов в порядке
возникновения.
filterSelectorParameters. Если действие фильтра зависит от каких-нибудь
параметров, значения которых нужно запросить у пользователя, то на этом этапе
нужно вывести соответствующий диалог. Значения параметров сохраняются в блоке
памяти, дескриптор которого записывается в поле parameters записи
FilterRecord. Изначально этому полю редактор присваивает значение nil.
Если плагин запускается из пункта меню Last Filter, то процедура со
значением filterSelectorParameters не вызывается, а происходит
вызов сразу со значением selector = filterSelectorPrepare.
Пользователю не должен показываться диалог с настройкой параметров.
Во избежание ошибок обработки неправильных параметров плагин всегда
должен проверять их наличие и корректность.
Параметры плагина не должны зависеть от размера, режима и других
особенностей изображения.
filterSelectorPrepare. Этот вызов предназначен для указания
редактору необходимого плагину размера памяти. Photoshop присваивает
максимальный размер доступной памяти в поле maxSpace. Можно
уменьшить это значение для более эффективной работы программы (сообщить
редактору, что мы и ему самому что-то от памяти тоже оставим).
filterSelectorStart. Теперь нужно убедиться, что все параметры
заданы корректно, и приготовиться обрабатывать изображение.
Вообще, для экономии ресурсов, изображение должно обрабатываться кусками.
В Photoshop существует два варианта обработки изображения. В первых версиях
редактора нужно было указать размеры первого куска исходного изображения,
результата и маски выделения в полях inRect, outRect и
maskRect записи FilterRecord, соответственно, и отдать управление
обратно. Потом несколько раз вызывается процедура с параметром
selector = filterSelectorContinue, которой передается
необходимая часть изображения. Все это обрабатывается, в поля записи
записываются размеры следующих кусков и управление снова передается
редактору.
Начиная с версии 3.0, Photoshop предоставляет функцию AdvanceStateProc(),
с помощью которой можно запросить новую часть изображения и произвести всю
обработку в одном вызове filterSelectorStart.
filterSelectorContinue. Процедура с этим значением параметра
вызывается несколько раз, пока хотя бы одно из полей inRect, outRect
или maskRect указывает на непустую часть изображения. Плагин должен
использовать указатели inData, outData (и maskData, если
учитывается выделение), чтобы обработать часть изображения. Потом обновить поля
inRect, outRect и maskRect для запроса следующего куска
изображения.
filterSelectorFinish. Здесь плагин может произвести какие-нибудь
свои завершающие действия. Этот вызов происходит только при успешном
завершении вызова filterSelectorStart, даже если произошла ошибка
на этапе filterSelectorContinue.
Если между вызовами filterSelectorContinue пользователь
отменит обработку изображения, то вместо filterSelectorContinue
сразу произойдет вызов filterSelectorFinish. Плагин должен уметь
обрабатывать такую ситуацию.
Назад |
Содержание |
Вперед
© Ярослав Музыкантов muzykantov@mail.ru
При использовании материалов обязательна ссылка на сайт
students.pm.vogu35.ru/pages/pm03/mya
|