На главную
Назад | Содержание | Вперед

Создаем ресурсы

Для плагинов Photoshop придуман свой формат ресурсов, которые специальной утилитой компилируются в нормальные ресурсы, а потом уже используются. Но нисколько не сложнее писать сразу обычные ресурсы, как мы и поступим. Можно использовать какой-нибудь редактор ресурсов, но мы будем писать в обычном текстовом редакторе.

Ресурсы плагинов Photoshop называются PiPL (Plug-In Property List). В ресурсах описываются свойства (property) плагина. Сначала идет 16-разрядное слово со значением 1, потом версия PiPL (32-разрядное число 0) и количество свойств плагина (32-разрядное целое).

Каждое свойство имеет структуру:

PIProperty = record
   vendorID       : longword;
   propertyKey    : longword;
   propertyID     : integer;
   propertyLength : integer;
   propertyData   : array of byte;
   { свойство должно быть выровнено на границу 4-х байт }
end;

Где поля структуры имеют следующее значение:

Поле Описание
vendorID

Идентификатор редактора. Для Photoshop '8BIM'.

propertyKey

Тип свойства.

propertyID

=0. Введено для возможности использования нескольких свойств одного типа. Пока что не используется.

propertyLength

Длина propertyData, не включая завершающие нули, выравнивающие структуру на границу 4 байт. Может быть равна нулю.

propertyData

Поле переменной длины, содержащее значение свойства. Может иметь любые значения.

Photoshop сначала появился для Macintosh, и с этим связаны некоторые особенности плагинописания под Windows. В частности, в Macintosh соглашении обратный порядок следования байт для многобайтовых переменных, чем в Windows, т.е. сохраняются старшие разряды по младшим адресам, а младшие - по старшим, а в Windows - наоборот.

Ключи свойств ('kind', 'name', 'mode' и т.п.) всегда имеют длину 4 байта и считываются сразу четверками. Поэтому все эти ключи нам придется писать наоборот (соответственно, 'dnik', 'eman', 'edom'). Еще один способ - использовать константы, но здесь обойдемся строками.

Создаем файл Flip_prop.rc:

16000  PiPL  DISCARDABLE
BEGIN
   1,       /* сначала всегда 1 */
   0L,      /* версия PiPL ресурса */
   7L,      /* количество свойств */

/* Свойство 'kind' или PIKindProperty - тип плагина. */
   "MIB8",  /* '8BIM' - сигнатура Photoshop */
   "dnik",  /* 'kind' */
   0L,      /* propertyID */
   4L,      /* длина поля */
   "MFB8",  /* '8BFM' - фильтрационный плагин */

/* Свойство 'name' или PINameProperty - название плагина,
   которое будет меню Filter редактора. */
   "MIB8",
   "eman",  /* 'name' */
   0L,
   5L,
   "\x04Flip\0\0\0",

/* Свойство 'catg' или PICategoryProperty - пункт подменю
   меню Filter, в котором будет отображаться имя плагина. */
   "MIB8",
   "gtac",  /* 'catg' */
   0L,
   12L,
   "\x0BMYA filters",

/* Свойство 'vers' или PIVersionProperty - версия плагина. */
   "MIB8",
   "srev",  /* 'vers' */
   0L,
   4L,
   0x00010000L,    /* 1.0 */

/* Свойство 'wx86' или PIWin32X86CodeProperty - имя главной процедуры
   плагина, которую будет вызывать редактор. */
   "MIB8",
   "68xw",  /* 'wx86' */
   0L,
   11L,
   "ENTRYPOINT\0\0", 

/* Свойство 'enbl' или PIEnableInfoProperty - показывает, когда
   будет активно меню вызова плагина. */
   "MIB8",
   "lbne",  /* 'enbl' */
   0L,
   45L,
   "in (PSHOP_ImageMode, GrayScaleMode, RGBMode)\0\0\0\0",
END

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

Если кто не знает, как откомпилировать наш ресурс, может использовать компилятор ресурсов brcc32.exe из Delphi. Компилируем из командной строки:

brcc32.exe Flip_prop.rc

и получаем файл Flip_prop.res.

Назад | Содержание | Вперед


© Ярослав Музыкантов muzykantov@mail.ru
При использовании материалов обязательна ссылка на сайт
students.pm.vogu35.ru/pages/pm03/mya