Дополнительные модули в Adobe Photoshop.
Разработка Plug-in
Практически все редакторы для обработки изображения сегодня поддерживают дополнительные модули, разрабатываемые для Adobe Photoshop. Однако при этом следует иметь в виду, что не все дополнительные фильтры будут работать корректно в других программах, так как разработчики все же ориентируются на архитектуру Photoshop. Если вы планируете использовать какой-нибудь дополнительный модуль с другим… Читать ещё >
Дополнительные модули в Adobe Photoshop. Разработка Plug-in (реферат, курсовая, диплом, контрольная)
ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ ГОУ ВПО «Московский Государственный открытый университет им. В. С. Черномырдина Кафедра «Информатика и информационные технологии»
Курсовая работа На тему:
«Дополнительные модули в Adobe Photoshop. Разработка Plug-in.»
Выполнила: студентка 5 курса Ф-та «Прикладная математика»
Специальность 10 501
Коновалова Е.В.
Проверила: Доцент кафедры
«Информатика и информационные технологии»
Борзунова Т.Л.
Москва 2012
Теоретическая часть
1.
Введение
.
2.Общая структура плагина.
3.Порядок взаимодействия редактора и фильтрационного плагина.
4.Работа с памятью.
5.Ресурсы плагина.
5.1 Основные свойства.
5.2 Описание кода.
5.3 Свойства фильтров.
6.Пример полноценного плагина.
7.
Заключение
.
Практическое задание в Turbo Pascal.
Движущийся квадрат.
Бегающий зеленый прямоугольник
Рисунок «Новый год»
Список используемой литературы.
Теоретическая часть
1.Введение
Дополнительный фильтр (plug-in) — это дополнительный модуль, который можно добавить в программу для расширения ее возможностей. Дополнительные фильтры можно условно разделить на две категории
¦ позволяющие добиваться результата, который невозможно получить при помощи стандартных средств;
¦ помогающие получить требуемый эффект быстрее, чем при использовании основного инструментария программы.
Выпуском дополнительных фильтров обычно занимаются сторонние разработчики, не работавшие над созданием программы Adobe Photoshop. Это понятно, ведь если сами разработчики знают, как дополнить программу более удобными инструментами, они просто включают их в нее, а не выпускают дополнения.
О популярности программы Adobe Photoshop можно судить по тому огромному количеству дополнительных модулей, которые для нее созданы. Дополнительные фильтры для Adobe Photoshop называют также расширениями (Extension).
Практически все редакторы для обработки изображения сегодня поддерживают дополнительные модули, разрабатываемые для Adobe Photoshop. Однако при этом следует иметь в виду, что не все дополнительные фильтры будут работать корректно в других программах, так как разработчики все же ориентируются на архитектуру Photoshop. Если вы планируете использовать какой-нибудь дополнительный модуль с другим графическим редактором, протестируйте его работоспособность, используя ознакомительную версию, или проверьте информацию о совместимости на сайте разработчика дополнительного модуля. Это поможет вам избежать разочарований при покупке фильтра.
2.Общая структура плагина
Плагин (plug-in) представляет собой обычную dll библиотеку со специальным расширением. Для фильтров это расширение .8bf. Специальные параметры, описываемые в ресурсах библиотеки, позволяют редактору распознать в библиотеке плагин и определить его свойства (тип, поддерживаемые режимы и т. п.). Все общение редактора с плагином происходит посредством вызовов экспортируемой плагином процедуры:
procedure ENTRYPOINT (selector: smallint;
var pluginParamBlock;
var data: integer;
var result: smallint); cdecl;
Обратное общение плагина с Photoshop происходит с помощью вызова функций обратного вызова (callback-функций), предоставляемых редактором.
Параметры процедуры ENTRYPOINT:
· selector указывает на производимую плагином операцию. Процедура с нулевым значением этого параметра вызывается для вывода диалога About плагина. Смысл остальных значений зависит от типа плагина и для фильтров будут рассмотрены ниже.
· pluginParamBlock используется для обмена информацией между плагином и редактором. У каждого типа плагина своя структура этого параметра. Для фильтров параметр указывает на запись типа FilterRecord, рассмотренную ниже.
· Переменная data сохраняется между вызовами плагина. Обычно ее используют для хранения дескриптора (handle) блока памяти, который плагин использует по своему усмотрению. При первом вызове плагина значение параметра равно 0.
· При каждом вызове плагин обязательно должен присвоить переменной result значение, указывающее статус завершения операции. Нулевое значение Photoshop интерпретирует как знак успешного завершения. Ненулевое значение показывает, что во время обработки изображения произошла какая-то ошибка, или пользователь отменил операцию. При положительном значении редактор считает, что сам плагин уже сообщил пользователю об ошибке. В противном случае Photoshop выводит стандартное сообщение.
Для совместимости с Photoshop процедуру нужно объявить с соглашением вызова cdecl.
3.Порядок взаимодействия редактора и фильтрационного плагина
При активизации фильтра из меню 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. Плагин должен уметь обрабатывать такую ситуацию.
4.Работа с памятью
Изначально Photoshop появился на Macintosh, а там было плохо реализовано использование файла подкачки операционной системой. Поэтому в Photoshop используется собственная система распределения памяти (даже в Windows).
Во время вызова filterSelectorPrepare плагин должен заключить соглашения по использованию памяти с Photoshop.
Photoshop передает максимальное количество байт, которое он может освободить для плагина в полях maxData или maxSpace записи pluginParamBlock. Если изображение маленькое, или может обрабатываться по кускам, то плагин может увеличить скорость работы, уменьшив эти значения. В противном случае редактору придется переместить все изображение на диск и использовать файл для перемещения данных в памяти. Но обычно сам плагин быстрее работает с неболим количеством более крупных объемов памяти. Нужно поэкспериментировать и найти компромиссное решение.
Первый метод — поделить maxData/maxSpace на 2 (половину памяти редактору и половину себе). Второй метод — установить значения в 0 и при необходимости использовать предоставляемые Photoshop пакеты буфера (buffer suite) или дескриптора (handle suite) для распределения памяти. С точки зрения редактора второй вариант является более эффективным, но требует написания дополнительного кода. Если плагин работает слишком медленно, то нужно провести несколько тестов с разными подходами.
Если плагин собирается использовать большие блоки памяти, то нужно в поле bufferSpace установить суммарное количество требуемой памяти.
5.Ресурсы плагина
В первых версиях Photoshop использовались PiMI ресурсы. Они проще, чем сейчас используемые PiPL ресурсы. В идеале, для совместимости с первыми версиями редактора, нужно писать и PiMI, но я не буду их рассматривать.
С помощью ресурсов Photoshop узнает, что библиотека является плагином. В ресурсах указывается тип, название, поддерживаемые режимы и другие необходимые редактору свойства плагина.
Фирма Adobe придумала собственный формат ресурсов. Эти ресурсы конвертируются в обычные ресурсы с помощью утилиты Cnvtpipl. exe, поставляемой с SDK, а затем включаются в проект. Я не буду разбирать этот формат. Мы будем писать обычные ресурсы в обычном текстовом редакторе. Также их можно создавать в редакторе ресурсов.
Недостатком такого подхода является необходимость самостоятельно прописывать размеры свойств. Но зато можно обойтись без дополнительных утилит.
Имена свойств и некоторые константы определены в файле PIResource.h.
Свойства типа CString являются строками в стиле Си, т. е. строками с завершающим нулем. PString — строки в стиле Паскаля, с указанием длины строки в первом байте. Если длина строки не кратна 4 байтам, то в конце строки нужно добавить выравнивающие нули.
5.1 Основные свойства
Таблица 1 Свойства, являющиеся общими для всех типов плагинов.
Имя | Тип | Ключ | Описание | |
PIKind Property | OSType | 0x6b696e64L ('kind') | Тип плагина. Для фильтров '8BFM'. | |
PIVersion Property | int32 | 0x76657273L ('vers') | Версия плагинного интерфейса редактора, для которой написан плагин. Старший номер версии записывается в старшие 16 бит, а младший — в младшие биты. Для каждого типа плагина нумерация может различаться. Текущая версия реализации интерфейса записана в модуле, его описывающем. | |
PIPriority Property | int32 | 0x70727479L ('prty') | Порядок загрузки плагинов. Также используется для определения порядка вывода названий плагинов в меню редактора. Сначала загружаются плагины с меньшими номерами. | |
PIImageModesProperty | FlagSet | 0x6d6f6465L ('mode') | Режимы изображения, которые поддерживает плагин (bitmap, grayscale, indexed, RGB, CMYK, HSL, HSB, multi-channel, duotone, Lab, gray 16 и RGB 48). Свойство определяет, когда плагин в меню редактора будет отображаться активным (черным) и неактивным (серым). | |
Имя | Тип | Ключ | Описание | |
PIEnable InfoProperty | CString | 0x656e626cL ('enbl') | Строка в стиле modula, определяющая, когда плагин в меню будет доступен. | |
PIRequired HostProperty | uint32 | 0x686f7374L ('host') | Редактор, для которого написан плагин. Для Photoshop 0×384 2494dL ('8BIM'). | |
PICategory Property | PString | 0x63617467L ('catg') | Подменю в меню Filter, в котором появится плагин. | |
PIName Property | PString | 0x6e616d65L ('name') | Название плагина, которое появится в подменю PICategoryProperty. | |
PIProgress TextProperty | PString | 0x70726f67L ('prog') | Текст индикатора процесса. | |
PIEnableInfoProperty
Плагин доступен в меню только тогда, когда результатом строки-выражения PIEnableInfoProperty является истина (true). PIEnableInfoProperty — это надмножество над PIImageModesProperty (поддерживаемые режимы). Несовпадение режимов этих двух множеств приведет к неопределенному результату.
При исполнении плагина нужно всегда проверять соответствие режима изображения, т.к. ложный результат выражения PIEnableInfoProperty еще не гарантирует невозможность его как-нибудь вызвать.
Грамматика логическоеВыраж = конъюнкция .
конъюнкция = отношение {" &&" отношение}.
равенство = простоеВыраж {операцияРавенства простоеВыраж}.
простоеВыраж = слагаемое {операцияСложения слагаемое}.
слагаемое = множитель {операцияУмножения множитель}.
множитель = целое | встроеннаяФункция | идентификатор
| «(«логическоеВыраж «)» | «(«простоеВыраж «)»
| «+» множитель | «-» множитель | «!» множитель.
целое = цифра {цифра}.
встроеннаяФункция = граничнаяФункция | функцияРазмерности
| функцияВхождения.
граничнаяФункция = («min» | «max») «(«простоеВыраж
" ," простоеВыраж {" ," простоеВыраж} «)» .
функцияРазмерности= «dim» «(«простоеВыраж «,» простоеВыраж «)» .
идентификатор = (буква | «_») буква .
операцияУмножения = «*» | «/» .
операцияСложения = «+» | «-» .
операцияРавенства = «==» | «≠».
операцияОтношения = «<» | «<=» | «>=» | «>» .
Таблица 2 Константы
Имя | Описание | |
true | Логическая правда | |
false | Логическая ложь | |
BitmapMode | Черно-белый режим | |
GrayScaleMode | Режим оттенков серого | |
IndexedMode | Режим индексированных цветов | |
RGBMode | Режим RGB | |
CMYKMode | Режим CMYK | |
HSLMode | Режим HSL | |
HSBMode | Режим HSB | |
MultichannelMode | Многоканальный режим | |
DuotoneMode | Двухцветный режим | |
LabMode | Режим Lab | |
Gray16Mode | Режим оттенков серого, 16 бит на канал | |
RGB48Mode | Режим RGB, 16 бит на канал | |
Таблица 2. Переменные
Имя | Описание | |
PSHOP_ImageMode | Режим изображения | |
PSHOP_ImageDepth | Глубина изображения | |
PSHOP_HasLayerMask | Логическая, присутствие маски слоя | |
PSHOP_HasSelectionMask | Логическая, присутствие маски выделения | |
PSHOP_HasTransparencyMask | Логическая, присутствие маски прозрачности | |
PSHOP_NumTargetChannels | Количество каналов результирующего изображения | |
PSHOP_NumTrueChannels | Количество каналов исходного изображения | |
PSHOP_IsTargetComposite | Логическая, плоское ли изображение? | |
PSHOP_ImageWidth | Ширина изображения | |
PSHOP_ImageHeight | Высота изображения | |
Таблица3.Приоритет операций
Операция | Описание | |
|| | Или | |
&& | И | |
+ ; | Сложение и вычитание | |
* / | Умножение и деление | |
< <= >= > | Меньше, меньше или равно, больше или равно, больше | |
== ≠ | Равенство, неравенство | |
(.) in () max () min () унарные: + - ! | Функции, увеличение, уменьшение, не | |
Результат от неопределенных значений Если в арифметическом выражении или сравнении хотя бы один из операндов имеет неопределенное значение, то само выражение будет иметь ложное значение.
Ненулевое значение интерпретируется как истина, нулевое и неопределенное — как ложь.
Функция вхождения Функция in () возвращает истинное значение только тогда, когда значение первого параметра совпадает со значением хотя бы одного из следующих параметров. Обычно используется для определения режима изображения, например:
in (PSHOP_ImageMode, RGBMode, CMYKMode, LabMode)
5.2 Описание кода
Описание кода указывает местонахождение исполняемого кода плагина. Можно написать переносимый на разные платформы плагин и указать для каждой платформы свой код.
Таблица 4.
Имя | Тип | Ключ | |
PIWin32X86CodeProperty | CString | 0x77783836L ('wx86') | |
Для 32-битной Windows свойство называется PIWin32X86CodeProperty и описывает название основной процедуры плагина.
5.3.Свойства фильтров
Имя | Тип | Ключ | |
PIFilterCaseInfoProperty | 7*4 байт | 0x66696369L ('fici') | |
Основная особенность Photoshop — поддержка динамически составляемых слоев.
Слой содержит данные о цвете и прозрачности каждой точки. В первых версиях редактора не было прозрачности. Абсолютно прозрачные точки имеют неопределенный цвет. Фильтр может редактировать как цвет, так и прозрачность, например, при пространственных искажениях (spatial distortions).
В Photoshop 3.0 реализовано гибкое представление данных о прозрачности. PIFilterCaseInfoProperty управляет представлением данных плагина. Редактор, сравнивая текущий формат данных с поддерживаемыми плагином вариантами, может как-то преобразовать данные для передачи плагину. Если преобразование невозможно, то плагин будет недоступен в меню.
Варианты представления данных:
№ | Имя | Описание | |
filterCaseFlatImage NoSelection | Это фоновый слой или плоское изображение. Отсутствует прозрачность и выделение. | ||
filterCaseFlatImage WithSelection | Нет прозрачности, но может быть выделение, которое будет представлено в виде маски. | ||
filterCaseFloating Selection | Данные изображения сопрово-ждаются маской. | ||
filterCaseEditable Transparency; NoSelection | Слой с редактируемой прозрачностью без выделения. | ||
filterCaseEditable Transparency; WithSelection | Слой с редактируемой прозрачностью и выделением. | ||
filterCaseProtected Transparency; NoSelection | Слой с нередактируемой прозрачностью без выделения. | ||
filterCaseProtected Transparency; WithSelection | Слой с нередактируемой прозрачностью и выделением. | ||
Если не поддерживается вариант редактируемой прозрачности, то Photoshop попытается использовать нередактируемую прозрачность. Если плагин не может обработать нередактируемую прозрачность без выделения, то слой будет представлен с плавающим выделением.
Для каждого из 7 вариантов представления данных в свойстве определяется 4-х байтная структура:
PIProperty = record
inputHandling: byte;
outputHandling: byte;
flags1: byte;
flags2: byte;
end;
inputHandling и outputHandling
Поля inputHandling и outputHandling определяют пред-обработку и пост-обработку данных изображения.
Режим обработки | Описание | |
0 = inCantFilter = outCantFilter | Данный вариант не поддерживается плагином. | |
1 = inStraightData = outStraightData | Редактор не должен преобразовывать данные. | |
Следующие три режима являются вариантами матирования и могут использоваться при искажении и размытии. Можно матировать данные, затем обработать и убрать цвет, добавленный матированием. В этих случаях матирование вычисляется по следующей формуле: mattedValue = ((unmattedValue * transparency) + 128) / 255 + ((matConstant * (255 — transparency)) + 128) / 255 А дематирование вычисляется по формуле: unmattedValue = ((mattedValue — matConstant) ./ transparency) + matConstant Где операция ./ представляет собой деление 8-битного числа с фиксированной точкой и результатом в диапазоне от 0 до 255. | ||
2 = inBlackMat = outBlackMat | Матировать исходное изображение, используя черный цвет (значение 0), основываясь на прозрачности. Или восстанавливать выходные данные, используя черный цвет (значение 0) цвет. | |
3 = inGrayMat = outGrayMat | Матировать исходное изображение, используя серый цвет (значение 128), основываясь на прозрачности. Или восстанавливать выходные данные, используя серый цвет (значение 128). | |
4 = inWhiteMat = outWhiteMat | Матировать исходное изображение, используя белый цвет (значение 255), основываясь на прозрачности. Или восстанавливать выходные данные, используя белый цвет. | |
Режимы, применимые только к исходным данным | ||
5 = inDefringe | Заполнить абсолютно прозрачные области цветом ближайших определенных пикселей. | |
6 = inBlackZap | Установить черный цвет для абсолютно прозрачных пикселей. | |
7 = inGrayZap | Установить серый цвет для абсолютно прозрачных пикселей. | |
8 = inWhiteZap | Установить белый цвет для абсолютно прозрачных пикселей. | |
10 = inBackgroundZap | Установить текущий цвет фона для абсолютно прозрачных пикселей. | |
11 = inForegroundZap | Установить текущий цвет изображения для абсолютно прозрачных пикселей. | |
Режимы, применимые только к выходным данным | ||
9 = outFillMask | Изображение заполняется в соответствии с маской прозрачности. Режим доступен только при редактируемой прозрачности. | |
flags1
Поле | Значения | |
0 = PIFilterDontCopyToDestinationBit | 0 = copySourceToDestanation 1 = doNotCopySourceToDestanation | |
Обычно, перед вызовом фильтра выходные данные заполняются исходными значениями. Это бесполезно для фильтра, который устанавливает значение всех точек. Установка этого бита отключает подготовительное заполнение. | ||
1 = PIFilterWorksWithBlankDataBit | 0 = doesNotWorkWithBlankData 1 = workWithBlankData | |
Указывает, может ли фильтр обрабатывать «пустые» (полностью прозрачные) области изображения. Если не может, то попытка фильтра получить доступ к пустым областям вызовет ошибку. Свойство применимо только к варианту редактируемой прозрачности. | ||
2 = PIFilterFiltersLayerMaskBit | 0 = doesNotFilterLayerMasks 1 = filtersLayerMasks | |
В случае редактируемой прозрачности этот бит определяет, будут ли фильтроваться маски слоев. При установке бита в выходных данных будет присутствовать канал маски. | ||
3 = PIFilterWritesOutsideSelectionBit | 0 = doNotWriteOutsideSelection 1 = writeOutsideSelection | |
Бит определяет, будет ли фильтр обрабатывать область изображения или слоя с выделением вне границ выделения. Обычно это очень плохо, но иногда нет более подходящих вариантов. В этом случае плагин может использовать данные о прозрачности слоя в качестве альтернативной маски. | ||
flags2
Поле flags2 зарезервировано, и должно быть равно нулю.
6.Пример полноценного плагина
редактор изображение плагин код
Приведу пример «полноценного» плагина, на основе которого можно будет создавать свои плагины.
Наш фильтр будет переворачивать картинку, но еще он будет уметь:
· работать в режимах GrayScale, RGB, Gray16, RGB48,
· разворачивать картинку горизонтально, вертикально и переворачивать вверх ногами,
· обрабатывать изображения любого размера (простой плагин может загнуться от нехватки памяти),
· выводить правильный диалог About.
Основные отличия в описании свойств:
// 'mode' поддерживаемые режимы изображения
kPhotoshopSignature,
PIImageModesProperty,
0L,
4L,
supportsGrayScale | supportsRGBColor
| supportsGray16 | supportsRGB48,
// 'enbl' когда плагин в меню будет доступен
kPhotoshopSignature,
PIEnableInfoProperty,
0L,
68L,
" in (PSHOP_ImageMode, GrayScaleMode,"
" RGBMode, Gray16Mode, RGB48Mode)" ,
PIFilterCaseInfoProperty. Для каждого из семи вариантов задаем такое описание:" x01×01×07×00″. Первые два байта со значением 1 указывают на отсутствие преобразования данных редактором. flags1 со значением 6 указывает, что не нужно копировать данные до обработки (фильтр заполняет весь прямоугольник, хотя для надежности можно использовать значение 7), и нужно разрешить фильтру использовать пустые области, чтобы не писать дополнительный код, и фильтр не будет писать вне области filterRecord.
// 'fici' свойство фильтра
kPhotoshopSignature,
PIFilterCaseInfoProperty,
0L,
28L,
" x01×01×06×00″ ,
" x01×01×06×00″ ,
" x01×01×06×00″ ,
" x01×01×06×00″ ,
" x01×01×06×00″ ,
" x01×01×06×00″ ,
" x01×01×06×00″ ,
А окно параметров будет выглядеть так:
Наш плагин компилируется в файл Flip2.8bf.
Средства разработки
· ps_api.rar (14 Кб) — необходимые модули для написания фильтров на Delphi (PITypes.pas, PIGeneral. pas, PIFilter. pas, PIAbout. pas и PIResource. h).
· PhotoshopAPI. rar (143 Кб) — Заголовочные файлы из Photoshop SDK для написания плагинов на Си. На основе этих файлов создавались модули для Delphi.
7.Заключение
Плагины (plug-in, внешний модуль) — это дополнительные фильтры для Photoshop, внешние программные модули для графических пакетов. В сущности своей плагины — небольшие программы, вызываемые внутри основной программы. Предназначение планинов — регулирование программного расширения (например, подражание рисованию карандашом, акварельными красками, масляными красками; использование плагинов для понижения уровня шума, повышения резкости; выделение главного объекта на изображении и отделение его от фона или объединение главного элемента изображения с другими объектами и так далее).
Плагины, как вспомогательные, дополнительные программы, предназначены для расширения функционала программного обеспечения, под которое они разработаны. Выбор плагинов, подключаемых к основному программному продукту, определяется самим пользователем, что позволяет создать уникальный инструментарий, ориентированный на потребности пользователя.
Плагины, которые используются для программы Adobe Photoshop могут называть «дополнительными фильтрами». Так же как и типичные фильтры, которые изначально встроены в программу, плагины меняют обрабатываемое изображение, искажают его, влияют на палитру, вносят шумы и так далее. С помощью планигов для фотошопа можно ускорить в разы и существенно упростить процессы, связанные с обработкой изображений. Целесообразно использовать плагины тогда, когда ясен и понятен процесс создания аналогичных эффектов вручную, ведь тогда существенно облегчается выбор необходимого плагина, а также, появляется возможность контроля над его работой.
Практическое задание в Turbo Pascal
Движущийся квадрат.
program pr7;
uses crt, graph;
const n=5;
type
Point=record
x, y: integer;
end;
mas=array[1.n] of Point;
procedure Z (x, y: integer;var m: mas;c:byte);
var i: byte;
begin
Setcolor (c);
m[1]. x:=x;m[1].y:=y;
m[2].x:=x;m[2].y:=y+90;
m[3].x:=x+90;m[3].y:=y+90;
m[4].x:=x+90;m[4].y:=y;
m[5].x:=x;m[5].y:=y;
moveto (m[1].x, m[1].y);
for i:=1 to n do
lineto (m[i]. x, m[i].y);
Setfillstyle (1,c);
end;
var gd, gm: integer;
x, y, x1,y1,i:integer;
p:mas;
c1,c2:byte;
k:char;
move:boolean;
begin
gd:=VGA;
gm:=VGAHi;
Initgraph (gd, gm,'c:tp7bgi');
Setbkcolor (8);
x:=10;y:=10;
c1:=7;c2:=8;
move:=true;
repeat
if keypressed then
begin
k:=readkey;
if k=#13 then {if enter}
for i:=1 to 10 do
begin
y1:=y;
x1:=x;
y:=y+1;
x:=x+1;
delay (6000);
Z (x1,y1,p, c2);
Z (x, y, p, c1);
move:=true;
end;
end;
if move then
begin
Z (x1,y1,p, c2);
Z (x, y, p, c1);
move:=false;
end;
OutTextXY (320,240,'Press Enter to continue');
until k=#27; {until escape}
closegraph;
end.
Бегающий зеленый прямоугольник
program kv;
uses
crt, graph;
var
x, y, dx, dy, w, h, driver, mode: integer;
begin
initgraph (driver, mode, 'c:/tp7/BGI');
if graphresult<>0 then begin
writeln ('none');
halt
end;
dx:=1;
dy:=0;
w:=100;
h:=10;
repeat
setfillstyle (1,0);
bar (x, y, x+w, y+h);
x:=x+dx;
y:=y+dy;
setfillstyle (1,2);
bar (x, y, x+w, y+h);
delay (100);
if (x+w>=getmaxx)and (y<=0) then
begin
dx:=0;
dy:=1;
end
else
if (y+h>=getmaxy)and (x+w>=getmaxx) then
begin
dx:=-1;
dy:=0;
end
else
if (x<=0)and (y+h>=getmaxy) then
begin
dx:=0;
dy:=-1;
end
else
if (y<=0)and (x<=0) then
begin
dx:=1;
dy:=0;
end;
until keypressed;
closegraph;
end.
Рисунок «Новый год»
Program Kursovaya;
Uses crt, graph;
Var gd, gm: integer;
begin
clrscr;
Detectgraph (gd, gm);
Initgraph (gd, gm,'C:tp7bgi');
{perviy salyut}
SetColor (5);
Line (24,18,32,40);
SetColor (10);
Line (10,48,30,48);
SetColor (3);
Line (48,35,62,24);
SetColor (12);
Line (10,48,30,48);
SetColor (9);
Line (52,40,62,40);
SetColor (4);
Line (30,50,10,85);
SetColor (14);
Line (32,53,32,125);
SetColor (13);
Line (44,53,58,70);
{vtoroy salyut}
SetColor (1);
Line (170,50,225,40);
SetColor (2);
Line (202,18,227,35);
SetColor (4);
Line (240,5,245,40);
SetColor (9);
Line (250,35,290,25);
SetColor (10);
Line (240,63,300,100);
SetColor (13);
Line (225,50,200,90);
{tretiy salyut}
SetColor (6);
Line (390,46,475,44);
SetColor (5);
Line (442,18,467,35);
SetColor (3);
Line (500,5,505,40);
SetColor (10);
Line (510,35,550,25);
SetColor (14);
Line (500,63,560,100);
SetColor (11);
Line (485,50,460,90);
{devochka}
SetColor (15);
Circle (205,295,20);
FloodFill (205,295,15); {golova}
SetColor (1);
Line (215,290,215,290); {praviy glaz}
Line (195,290,195,290); {leviy glaz}
SetColor (0);
Line (205,295,205,295); {nos}
SetColor (5);
Arc (205,295,225,315,10); {rot}
Line (205,317,160,420); {tulovische}
Line (205,317,250,420);
Line (160,420,250,420);
SetFillStyle (3,4); {zakraska platiya}
FloodFill (200,360,5);
SetColor (15);
Line (195,420,195,435); {levaya noga}
Line (195,435,185,435);
Line (215,420,215,435); {pravaya noga}
Line (215,435,225,435);
SetColor (15);
Line (199,330,150,360); {levaya ruka}
Line (211,330,260,360); {pravaya ruka}
{malchik}
Line (260,360,309,330); {levaya ruka}
Line (387,330,436,360); {pravaya ruka}
Circle (348,295,20);
SetFillStyle (1,15);
FloodFill (348,295,15); {golova}
SetColor (2);
Line (358,290,358,290); {praviy glaz}
Line (338,290,338,290); {leviy glaz}
SetColor (4);
Arc (348,295,225,315,10); {rot}
SetColor (0);
Line (348,295,348,295); {nos}
SetColor (7);
Line (303,317,348,420); {tulovische}
Line (348,420,393,317);
Line (303,317,393,317);
SetFillStyle (11,7);
FloodFill (348,330,7);
SetColor (15);
Line (348,420,330,435); {levaya noga}
Line (330,435,310,435);
Line (348,420,366,435); {pravaya noga}
Line (366,435,386,435);
{elka}
SetColor (2);
Line (509,120,486,180);
Line (486,180,496,180);
Line (496,180,474,240);
Line (474,240,484,240);
Line (484,240,462,300);
Line (462,300,472,300);
Line (472,300,450,360);
Line (450,360,460,360);
Line (460,360,438,420);
Line (438,420,580,420);
Line (580,420,559,360);
Line (558,360,568,360);
Line (568,360,546,300);
Line (546,300,556,300);
Line (556,300,534,240);
Line (534,240,544,240);
Line (544,240,522,180);
Line (522,180,532,180);
Line (532,180,509,120);
SetFillStyle (7,2);
FloodFill (509,130,2);
SetFillStyle (1,6); {noga elki}
Bar (496,421,522,435);
{igrushki}
SetColor (14);
Circle (509,400,10);
SetColor (4);
Circle (460,400,10);
SetColor (9);
Circle (558,400,10);
SetColor (5);
Circle (480,330,10);
SetColor (15);
Circle (538,330,10)
SetColor (3);
Circle (490,270,10);
SetColor (4);
Circle (528,270,10);
SetColor (7);
Circle (496,210,8);
SetColor (13);
Circle (522,210,8);
SetColor (14);
Circle (509,150,10);
Readln
end.
Список используемой литературы
1. http://ict.edu.ru/ft/2 402/num3phtsp.pdf Вежневец Владимир. Написание плагинов для Adobe Photoshop. Статья на русском языке. Приводится ознакомительное описание фильтрационных плагинов для облегчения изучения Adobe Photoshop SDK. Статья дает представление о структуре плагина и взаимодействии его с редактором. Изначально статья опубликована на сайте http://cgm.graphicon.ru/. Также ее можно найти по адресу http://www.codenet.ru/pshop/8bf.php.
2. http://old.computerra.ru/offline/2000/364/4881/for_print.html Евгений Краснопольский. Плагин к Photoshop, и как его сделать. Статья на русском языке. Описываются основные генераторы фильтров (Filter Factory, Filters Unlimited, Filter Formula, Filter Meister) и приводятся их сравнительные характеристики. Обзорно упоминаются плагины.