Дополнительные модули в 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 управляет представлением данных плагина. Редактор, сравнивая текущий формат данных с поддерживаемыми плагином вариантами, может как-то преобразовать данные для передачи плагину. Если преобразование невозможно, то плагин будет недоступен в меню.

Варианты представления данных:

Имя

Описание

1

filterCaseFlatImage

NoSelection

Это фоновый слой или плоское изображение. Отсутствует прозрачность и выделение.

2

filterCaseFlatImage

WithSelection

Нет прозрачности, но может быть выделение, которое будет представлено в виде маски.

3

filterCaseFloating

Selection

Данные изображения сопрово-ждаются маской.

4

filterCaseEditable

Transparency-

NoSelection

Слой с редактируемой прозрачностью без выделения.

5

filterCaseEditable

Transparency-

WithSelection

Слой с редактируемой прозрачностью и выделением.

6

filterCaseProtected

Transparency-

NoSelection

Слой с нередактируемой прозрачностью без выделения.

7

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) и приводятся их сравнительные характеристики. Обзорно упоминаются плагины.

ПоказатьСвернуть
Заполнить форму текущей работой